最近看書看到二維數組與指針的章節,將一個二維數組名字賦值給一個指向整形數的指針,咋看沒毛病,其實還是數組與指針的概念沒有理清楚,先放代碼。
#include <stdio.h>
int Array[1][2]={1,2};
int main(void) {
int *p;
//p = Array; 兩邊的類型不一樣不能直接賦值
if(*Array == Array[0])
{
printf("OK\n");
}
return 0;
}
首先int *p定義了一個指向整形變量的指針。
int Array[2][2]={1,2,3,4}
這個語句說明Array是一個數組,該數組擁有1個數組類型的元素,其中每個元素是一個擁有2個整形元素的數組。
Array數組名代表指向第一個元素的指針,而該元素是一個數組,立即推--->Array是一個指向數組的指針。而P是一個指向整形變量的指針,兩者類型都不一致,所以 p = Array; 是錯誤的。
下面我又做了一個變換*Array就是指向第一個數組中的第一個整形數的指針了,更容易理解了,上述代碼最終輸出OK。
如果上述代碼不註釋則會提示:error: cannot convert ‘int [1][2]’ to ‘int*’ in assignment,就是類型不匹配。