当前位置:  开发笔记 > 编程语言 > 正文

当任何值分配给*(p + 1)时,为什么指针p的值发生了变化?

如何解决《当任何值分配给*(p+1)时,为什么指针p的值发生了变化?》经验,为你挑选了1个好方法。



1> Ziffusion..:

这两个变量yp被分配在栈上.它们的存储彼此相邻,看起来像这样:

y:    4 bytes
p:    8 bytes

需要注意的是 + 4.

对于您的示例,实际地址如下所示:

y: 0x00007ffe2368f2e4   4 bytes
p: 0x00007ffe2368f2e8   8 bytes

y = 1p = &y,内存看起来像如下:

y: 0x00007ffe2368f2e4 0x00000001          4 bytes
p: 0x00007ffe2368f2e8 0x00007ffe2368f2e4  8 bytes

p + 1是的值p+ sizeof(int),这是0x00007ffe2368f2e4 + 4,其是0x00007ffe2368f2e8,它是地址p.

*(p + 1) = 10设置4个字节0x00007ffe2368f2e810.

这将覆盖8字节值的0x00007ffe2368f2e84个字节,即4个字节的值p.

0x7ffe 2368f2e4
0x7ffe 0000000a ------> this is the lower 4 bytes set to 10 i.e. 0xa

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有