1.指针所占内存大小
在32位(x86)的操作系统下,无论什么数据类型的指针,只要是指针,大小都为4个字节,64位下为8个字节。
2.区分空指针和野指针:
指向NULL的为空指针,指向编号为0的内存空间,空指针指向的内存是不可以被访问的。(0~255内存被系统占用,都不可以访问 )
指向非法内存空间的为野指针,就是不知道指向的空间存放的内容是什么,
3.指针和数组
int b[5] = { 0 };
int* p = b;//这里不用&b是因为数组名也就是数组的首地址
对数组名取地址&b得到是存放这个数组名,也就是存放了数组首地址的地址。
虽然指针占4个字节,但在用指针访问数组时,比如访问b[1],使用的是
*(p+1),而不是 *(p+4)。按理说int型数组每一个元素占4个字节,因此第二个元素的首地址应该是第一个元素首地址+4,但是用指针访问只需要+1就表示访问下一个元素,由于指针已知是int型数组,因此+1时指针就会向后偏移4个字节,至于背后的原因暂时不知,先记录下来。
4.发生读取位置发生访问冲突的bug时,很有可能是访问了野指针指向的内存空间,或者是指针指向的内存在访问前已经被释放掉了,再访问相同的地址时可能会发生访问冲突。