看看這個例子:如何指向C中的整數數組?
#include <stdio.h>
#include <stdlib.h>
int main() {
int a[5] = {1,2,3,4,5}; // LINE A
int (*b)[5] = &a; // LINE B
printf("%d\n", (*b)[0]); // LINE C
}
我試着寫上
LINE B
int (*b)[5] = a
,但沒有奏效。任何人都可以解釋爲什麼這不起作用?我雖然陣列衰變成指針,所以我不明白爲什麼我需要通過&a
明確地指出a
的地址。這就像a
已經是一個指針,因爲它腐爛了,但現在我拿一個指針的地址?雙指針?咦?任何人都可以解釋如何
(*b)[0]
的作品?這就像我廢除b
,它本身是一個指向5個整數數組的指針,但我以某種方式獲取它的第[0]個元素?這種情況下的[0]元素不是5個整數?我以某種方式結束了一個整數,但它打印1
。
我真的很困惑。謝謝。
1)數組衰減爲指向其第一個元素的指針,而不是指向其自身的指針。2)如果取消引用「指向5個整數的指針」,則會得到一個「5個整數」,然後用'[0]'索引。 –
只有在不是'sizeof','_Alignof'(C11),'&'(適用於您的情況)或數組初始值設定項中使用的字符串文字的操作數時,數組纔會衰減。 – mafso
@mafso這不適用於'_Alignof',因爲'_Alignof'操作數是一個類型名稱,不能是一個表達式。草稿版本的c11有問題,並已在c11的發行版中得到更正。 – ouah