指针知识点

来源:互联网 发布:工兵铲推荐 知乎 编辑:程序博客网 时间:2024/05/21 06:48

指针定义:指针是一个变量,保存的内容为地址。

int num = 5;

如果系统分配给num的空间为0x1000到0x1003 num的地址就为首字节地址0x1000。0x1000内保存的内容为5。

定义指针p

int* p = #

指针p内保存的内容为num的地址,如果系统给p分配的地址为0x2000,可以得到下图

指向内存空间和对应的内存空间:

num++:对num对应的内存空间的值加1.

p++:对p对应的内存空间的值加1.

(*p)++:对p指向的内存空间加1.

‘ * ’为取值运算符,根据对应内存空间里保存的地址找到其对应的内存空间。

p == &num

*p == num == *(&num)


int *pp = &p;

num == *p == **pp ==*(&num)

p == *pp == &num


int* ppp = &pp;

**ppp == *pp == p == &num

***ppp == **pp == *p == num =*(&num)


int *p; 定义为指针类型为int* 指向int

char *p; 定义为指针类型为char* 指向char


野指针:随机指向一块内存的指针,有可能导致内存泄漏。

内存泄漏:访问一块不可访问或已经释放的内存。

int *p;

scanf("%d",p);

printf("%d",*p);

这里虽然定义了指针,但是未对其进行初始化,系统对未初始化的局部变量分配一个随机的值,所以p指向一个随机的地址,而这个地址系统不一定分配给用户,用户不一定有使用权限,或者有使用权限但已经释放,如果使用此指针就有可能造成内存泄漏。


避免野指针需要给指针赋初值值

int * p = (int * )malloc(sizeof(int));

int * p = NULL;

0 0
原创粉丝点击