2010-06-07 74 views

回答

10

好吧,a是数组第一个元素的地址,而& a是数组的地址,但显然他们都有相同的地址。

然而,当你从一个指针添加(或减去)一个数字时,编译器会考虑数据的大小,因此在你的情况下(假设int的大小是4字节),a + 1将比a更大4,因为你将指针移动一个整数,但是& a + 1会增大40,因为你更多的指针是前一个10个整数的指针。

21

这两个语句都打印出地址,可能是为了解释指针算术。

a&a是不一样的,他们有不同的类型,但保持相同的内存地址。

&aint (*)[10]类型(其作用类似于一个指针数组)
aint [10]类型(其作用类似于一个指向单个元件)的

因此,当添加1保持的那些类型中心神。指针将被地址所包含类型的大小所偏移。偏移int的大小,即偏移到数组中的第二个元素。 &a+1补偿完全超过整个阵列。

+1

这几乎都是C中的所有类型:算术和大小。 – mathk 2010-06-07 12:49:57

+0

为了保持完整性,可以添加'&a [0]'是'int *'类型并且非常像'a'。 – Hugues 2013-09-18 20:10:07

+0

@Brian R.Bondy所以我们可以使用'sizeof'来显示它们的类型差异吗? – sikisis 2015-12-21 10:10:12

相关问题