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
。