C++中间地址存储值的疑问:指针与内存字节访问问题
C++指针与内存地址问题解析
int* p = &sum的地址是否为90000000?
只有在你参考的教学图示中明确将sum的起始地址标注为90000000时,这个假设才成立。实际编程场景中,变量的内存地址由操作系统动态分配,完全不固定,所以这只是用于理解内存模型的教学示例值。若
&sum确实是90000000,解引用地址90000001的指针会得到什么?
首先要明确:直接将90000001强转为指针并解引用属于C++标准定义的未定义行为,没有可预期的固定结果。
从教学图示的内存模型角度(假设sum是4字节int,采用小端存储):90000000是sum的起始地址,对应存储的是int值的最低字节;90000001是第二个字节的地址。如果用char*类型指针解引用,会得到该地址对应的1字节值;但如果用int*类型指针解引用,属于访问未对齐的int地址,不仅结果不可控,还可能引发硬件异常。这些地址是否指向同一4字节内容?
不是。sum作为4字节int,它的内存范围是从起始地址90000000到90000003(包含两端)的连续4个字节。90000001只是这个4字节块中的单个字节地址,仅对应1字节的内存单元,和整个4字节的sum变量不是同一个内容。
内容的提问来源于stack exchange,提问作者Alec Mather
相关产品推荐
相关产品推荐

