C++指针问题汇总

文章介绍了指针在不同操作系统下的内存占用,区分了空指针(NULL)与野指针的概念。空指针不可访问,而野指针指向未知内存。讨论了指针与数组的关系,指针加1实际上移动了4个字节,对应int类型数组的下一个元素。最后提到了访问冲突通常与野指针或已释放内存有关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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时,很有可能是访问了野指针指向的内存空间,或者是指针指向的内存在访问前已经被释放掉了,再访问相同的地址时可能会发生访问冲突。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值