C 为什么这两个说明大小不同?

C 为什么这两个说明大小不同?,c,pointers,C,Pointers,以下是两个说明: int p = 0; int size_1 = (int*)(&p+1)-(int*)&p; int size_2 = (char*)(&p+1)-(char*)&p; 我发现size\u1是1,size\u2是4。我想知道为什么它们会以这种方式变化,根本原因是int在您的系统上是4个字节,而char是1个字节。代码(&p+1)将在p之后返回一个指向内存地址4字节的指针(sizeof(int))。然后,当您分配给size_1时,您要求的答案是i

以下是两个说明:

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

我发现
size\u1
1
size\u2
4
。我想知道为什么它们会以这种方式变化,根本原因是
int
在您的系统上是4个字节,而
char
是1个字节。代码
(&p+1)
将在
p
之后返回一个指向内存地址4字节的指针(
sizeof(int)
)。然后,当您分配给
size_1
时,您要求的答案是
int
大小,因此您得到1。对于
size\u 2
,您需要询问
char
size中的地址之间的差异,即4。

这是基本的指针算法。稍微简化一点,减去两个
int*
会产生适合两个指针的
int
s的数量(一),而减去两个
char*
会产生适合两个指针的
char
s的数量(在您的系统上,它恰好是四个,因为
int
是四字节宽的).

整数的开始和结束之间的距离是1整数或4个字符(在您的系统上)。我不理解在这个问题上的否决票。虽然这是一个初级问题,但我很想知道除了这里已经给出的答案之外,是否还有其他答案。将
size_2
除以
sizeof(int)
,结果将等于
size_1