我們都知道,以限定串的2-d陣列我們做指針從一個整數2-d陣列和在C語言的字符串
char *c[5] = {"string1", "string2", "string3", "string4", "string5"};
或
char c1[][10] = {"string1", "string2", "string3", "string4", "string5"};
,當我不同得到其中的一個值,我們做`printf(「%c」,c [1] [0]); //只是例子
但在宣佈
int a[][3]={{20,60,30},{40,90,180},{200,880,900}}; //no problem with getting the output from
當但在宣佈
int (*a1)[3]={{20,60,30},{40,90,180},{200,880,900}};
,並試圖讓輸出printf("%i",a1[0][0]);
程序的時候是崩潰
我知道,自定義(一)我可以做如下
int(*p)[3]=a; then printf("%i",p[0][0]);
我也知道如果我做int *a1[3]
然後我創建一個指針數組,並避免我們把括號,所以爲什麼與int(*a1)[3]
程序崩潰的定義?以及編譯器如何處理它?和這個案件和字符串char *c[5]
的情況有什麼區別,如果我把char (*c)[5]
和char沒有問題發生相同?
是不是像' int(* a1)[3]'說_pointer指向3個ints_的數組,這不是您的定義嗎? –
實際上,我對兩個定義int(* a1)[3]或int * a1 [3]感到困惑,我認爲它們都是一個指向a1的指針,以3個整數組成的數組,但compilar對待它們的方式不同,我錯了嗎? –
打開編譯器警告。您正在使用整數加載初始化指向數組的指針。 – Quentin