为什么这两个说明的大小不一?

时间:2016-09-27 01:51:29

标签: c pointers

以下是两条说明:

int p = 0;
int size_1 = (int*)(&p+1)-(int*)&p;
int size_2 = (char*)(&p+1)-(char*)&p;

我发现size_11size_24。我想知道他们为什么会这样改变

2 个答案:

答案 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。