1 回答
已采納

onemoo
TA貢獻883條經(jīng)驗 獲得超454個贊
&a 表示取整個數(shù)組的地址,得到的是指向數(shù)組的指針。
而 &a[0] 是直接取數(shù)組第一個元素的地址,得到的是 int 指針。
不過呢,雖然 &a 和 &a[0] 的類型不同,但它們的值是一樣的。而 int *p = &a 是強行把數(shù)組指針賦值給 int 指針,所以 p 還是指向了 a 的第一個元素的地址。后續(xù)按照指向數(shù)組元素的指針來使用 p 也能正常工作。
但是注意,應該避免寫 int *p = &a 這樣的代碼。 因為這畢竟和使用意圖不符——等號左側(cè)想要的是 int 指針類型,等號右側(cè)卻是數(shù)組指針類型——等號兩側(cè)的類型本不兼容,只不過恰好值相同且被強制轉(zhuǎn)型才碰巧可以正常工作的。 ?而且這樣的代碼在編譯時會得到類型不符的警告的。
另外說一種可行的寫法:當你直接在等號右側(cè)使用數(shù)組名 a 時,就等于使用 a 的第一個元素的地址,也就是 int 指針類型。
你可以寫 int *p = a, 這和 int *p = &a[0] 是等價的。
點擊展開后面1條
- 1 回答
- 0 關注
- 2742 瀏覽
添加回答
舉報
0/150
提交
取消