【发布时间】:2013-12-10 05:14:03
【问题描述】:
如果a是一个int数组,(char*) &a[1] - (char *)&a[0]等于4,而&a[1] - &a[0]等于1。这是为什么呢?
【问题讨论】:
-
4 字节对齐?在第一种情况下进行指针转换后,您将获得正确的信息。
-
指针算法是根据所指向对象的大小来计算的。
-
所以一旦它被转换,编译器认为这两个元素是字节分开的,这种差异意味着它们之间有 4 个字符,所以它返回一个 4。而在非转换的情况下,编译器认为这两个元素相隔 4 个字节,但它们相隔 1 个 int 元素,所以它返回 1?
-
是指针运算,就像指针减法一样。