为什么这两个说明的大小有所不同?
问题描述:
这里有两条指令:为什么这两个说明的大小有所不同?
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
。我想知道为什么他们改变这种方式
答
根本原因是int
是在您的系统上4个字节,而char
是1个字节。代码(&p+1)
将在p
之后返回指向内存地址4个字节(sizeof(int)
)的指针。然后,当你分配给size_1
您在条款要求你的答案上int
大小,这样你可以获得1. size_2
,你问在char
大小,这给地址之间的差别4.
答
这是基本的指针运算。过分简化一点,减去两个int*
产生适合两个指针(一个)之间的int
的数量,而减去两个char*
产生适合指针之间的数量char
(在您的系统上,它恰好是四个,因为int
是四字节宽)。
int的开始和结束之间的距离是1 int或4个字符(在您的系统上) –
我不明白在这个问题上downvote。虽然这是一个初学者级别的问题,但我有兴趣查明除了已经给出的答案以外是否还有其他答案。 – legen
用'sizeof(int)'分隔'size_2',结果等于'size_1'。 – Peter