2014-02-21 37 views
0
int a[10]; 
int *p = a; //way 1 
int *p1 = &a[0]; //way 2 

你能告訴我上面兩種方法之間的區別嗎?C語言:指針賦值的兩種方法之間的區別

+3

沒有區別...... – sashkello

+0

第一種方式,方法1是_slightly_ wrong:你正在給一個「int指針」分配一個「int數組」。然而它起作用,因爲最終結果是一樣的 - a和a [0]的地址是相同的。但第二種形式更爲正確。 (無論如何,這是一種哲學)。 – linuxfan

回答

5

沒有區別。分別將第一個元素的地址分配給指針pp1

在第一種情況下,a會自動轉換爲第一個元素的地址。在第二種情況下,它明確使用第一個元素的地址。

+0

謝謝!現在我知道我是對的! –

+1

第一種方法不接受數組的地址,並且數組的地址不等於第一個元素的地址。第一種方法使用表達式'a'。在這裏,標識符「a」代表陣列。在這個表達式中,但不是所有的表達式,數組**都會自動轉換爲它的第一個元素的地址。當數組是'sizeof',一元'&',或'_Alignof'的操作數,或者是用於初始化數組的字符串時,不會發生此轉換。 –

+0

若要查看數組的地址與第一個元素的地址不相同,請考慮由於類型不匹配,「int * p =&a;'將生成警告消息,並且」&a + 1「指向不同的類型位置(在數組之外)比'&a [0] + 1'(數組的第二個元素)。 –