指针的目标和“解引号”
1.指针的目标
指针指向的内存区域中的数据称为指针的目标
int a =126;
int *p=&a;
分配给a空间,假如起始地址为fe80,数据是126。为P变量分配内存空间,p存的值为fe80,我们很容易想到就是a的值。a就是p的目标。
问题:如何把变量a的值加1。如何通过指针修改指针的目标?这就涉及到了指针的解引用。
声明一个整型变量a,再声明一个指针变量,取目标地址,想把a的值加1,用*p间接访问a目标。*p++即加1。
示意图:
例题:
答案为B。
指针的赋值
- 指针的赋值运算指的是通过赋值运算符指向指针变量送一个地址值
- 向一个指针变量赋值时,送的值必须是地址常量或指针变量,不能是普通的整数
- 指针赋值运算常见的3种形式
如果想+1,用a++;*p++;*q++注意加括号。
%p为看指针的内容。
指针的大小
整型数用整型指针,字符型数用字符型指针,字符占一个字节,整型占4个字节,但指针占的字节都是一样的。
空指针
把不定性改为确定性,不能直接*p。
野指针
- 指针指向的位置不可知(随机的,不确定性的,没有明确指向的)
- 指向被释放的内存或没有访问权限的内存的指针
野指针怎么造成的?
①指针没有初始化
②指针越界
③指针指向内存空间释放了
空间被释放了。
野指针的危害
①段错误
指向不可访问的地址,结果是触发段错误
那么我们又该怎么避免野指针呢?