2010-06-07 270 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

相關問題