为什么这两个说明的大小有所不同?

问题描述:

这里有两条指令:为什么这两个说明的大小有所不同?

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

我发现size_11size_24。我想知道为什么他们改变这种方式

+0

int的开始和结束之间的距离是1 int或4个字符(在您的系统上) –

+0

我不明白在这个问题上downvote。虽然这是一个初学者级别的问题,但我有兴趣查明除了已经给出的答案以外是否还有其他答案。 – legen

+0

用'sizeof(int)'分隔'size_2',结果等于'size_1'。 – Peter

根本原因是int是在您的系统上4个字节,而char是1个字节。代码(&p+1)将在p之后返回指向内存地址4个字节(sizeof(int))的指针。然后,当你分配给size_1您在条款要求你的答案上int大小,这样你可以获得1. size_2,你问在char大小,这给地址之间的差别4.

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