以下是两条说明:
int p = 0;
int size_1 = (int*)(&p+1)-(int*)&p;
int size_2 = (char*)(&p+1)-(char*)&p;
我发现size_1
为1
而size_2
为4
。我想知道他们为什么会这样改变
答案 0 :(得分:3)
这是基本的指针算术。稍微简化一点,减去两个int*
会产生两个指针之间的int
个数(一个),而减去两个char*
会产生char
个数适合指针之间(在您的系统上,恰好是四个,因为int
是四字节宽)。
答案 1 :(得分:2)
根本原因是系统上int
为4个字节,而char
为1个字节。代码(&p+1)
将在sizeof(int)
之后返回指向内存地址4字节(p
)的指针。然后,当您分配到size_1
时,您要求int
尺寸的答案,因此您得到1.对于size_2
,您要求{{1}中的地址之间的区别大小,给出4。