这两个变量y
和p
被分配在栈上.它们的存储彼此相邻,看起来像这样:
y:4 bytes p: 8 bytes
需要注意的是
是
.
对于您的示例,实际地址如下所示:
y: 0x00007ffe2368f2e44 bytes p: 0x00007ffe2368f2e8 8 bytes
后y = 1
和p = &y
,内存看起来像如下:
y: 0x00007ffe2368f2e4 0x00000001 4 bytes p: 0x00007ffe2368f2e8 0x00007ffe2368f2e4 8 bytes
p + 1
是的值p
+ sizeof(int)
,这是0x00007ffe2368f2e4 + 4
,其是0x00007ffe2368f2e8
,它是地址p
.
*(p + 1) = 10
设置4个字节0x00007ffe2368f2e8
到10
.
这将覆盖8字节值的0x00007ffe2368f2e8
4个字节,即4个字节的值p
.
0x7ffe 2368f2e4 0x7ffe 0000000a ------> this is the lower 4 bytes set to 10 i.e. 0xa