爲什麼沒有在意外打印2D數組的一個維度時出現編譯時錯誤?此代碼爲什麼打印地址?
#include <stdio.h>
void main() {
int i;
int arr[2][3] = { 1, 2, 3, 4, 5, 6 }; //<- Declared a 2D array
for (i = 0; i < 6; i++) {
printf("%d\n", arr[i]); // <- Accidently forgot a dimension
}
}
我應該收到編譯時錯誤,但我得到了一組地址!爲什麼?在編譯器的情況下,arr[0]
是什麼意思?
因爲* array *類型(這是'arr [i]'的類型)*衰減*到指針。 –
它應該會產生警告(類型爲int *'的錯誤格式說明符'%d'),如果啓用的話。 http://coliru.stacked-crooked.com/a/8d995ce5a6a38cb2 – tkausl
從技術上講,輸出是未定義的行爲,因爲'%d'不能用於指針。 –