
這段代碼是我在看視頻時看到的
正常來講,陣列名代表陣列首元素的地址,陣列a[5]的首地址就是a;
然后問題就來了,第五第六行代碼我理解,就是簡單的輸出地址,因為a代表首地址;但第六,第七行我就不明白了,&a是什么東西,a不已經是首地址了嗎,&a不就是取首地址的首地址嗎,這是什么意思。
uj5u.com熱心網友回復:
陣列不是地址,陣列也是類似于 int 的普通的物件,但一般情況下陣列名會自動變成指向首元素的指標(這里經常有人會誤解),也就是說,a 可以表示 &a[0]。&a 是取這個陣列物件的地址。uj5u.com熱心網友回復:
a+1是表示第二個元素的地址,a是陣列的首地址同時也是第一個元素的地址.因此a+1是第二個元素的地址.&a表示int (*)[5]型別, 也是一個地址,只是型別不一樣了.
&a+1表示向后偏移sizeof(int) * 5的地址.
uj5u.com熱心網友回復:
陣列名即是陣列的地址,也是陣列首元素的地址,是說a指向的地址是&a取得的地址,也是&a[0]地址,即&a和&a[0]取得的地址相同。但是,他們的指標型別不同,只是指向了同一個地址而已。&a是int(*)[]型別,也就是陣列的指標(也就是說&a取得的地址型別是一個指向陣列型別的指標),所以該指標加1,就會移動陣列長度個int位元組,即&a+1指向的地址是&a的地址+陣列長度*sizeof(int),所以列印結果就比&a多5*4=20個位元組。而&a[0]和a都是int*型別,也就是int指標(也就是指向int型別的指標),所以指標加1就會移動1個int位元組,也就是4個位元組。所以列印結果a+1比a多4個位元組。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/143515.html
標籤:C語言
上一篇:return 0和void的關系
下一篇:鏈表
