指针

62 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情 指针*

指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(pointsto)存在电脑存储器中另一个地方存放的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。将地址形象化的称为指针。打个比方:有个人让你去麦当劳帮我买个雪糕,那么麦当劳是这个变量a,但是那个人现在把麦当劳所在的地址写在纸上给你,那么这张纸就可以看做一个指向麦当劳的指针。****

图片.png 定义指针变量

 

类型名 *指针变量名

Char *pa;  用于定义一个指向字符类型的指针(如上图中的a应定义为 char *a即为地址指向存放的值类型)

Int *pb;

取地址运算符和取值运算符

如果想获得某个变量的地址,用取地址运算符(&)

Char *pa = &a;

Int *pb = &f;

访问指针变量指向的数据,用取值运算符(*)

Printf(“%c,%d\n”,*pa,*bp);/间接运算符/

Printf(“%c,%d\n”,a,f);/直接运算符/

 

#include <stdio.h>

main()

{

char a = 'F';

int f = 123;

char *pa = &a;/获得变量a的地址,定义指针类型变量/

int *pb = &f;/char,int 要与取地址类型一致/

printf("a = %c\n",*pa);/输出取值,间接访问/

printf("f = %d\n",*pb);

*pa = 'C';

*pb += 1;

printf("now , a =%c\n",*pa);/通过指针间接更改变量的值/

printf("now , f = %d\n",*pb);

printf("sizeof pa = %d\n",sizeof(pa));/指针类型占四个字节/

printf("sizeof pb = %d\n",sizeof(pb));

printf("the addr of pa is %p\n",pa);

printf("the addr of pb is %p\n",pb);/%p为打印地址类型数据/

}

图片.png 避免访问未初始化的指针(野指针)

#include <stdio.h>

main()

{

Int *a;/没有被正确赋值,会被终止或值错误/

*a = 123;

Return 0;

}

指针a(局部变量)是随机分配的,在内存中是合法的,但并不会得到所要的值。