int a[2][3] = { {1, 2} , {3, 4, 5} };//定義一個二維數組
二維數組作爲參數傳遞給函數:
void fun(int a[2][3]) √ :我是一個有兩個元素的數組,我的每個元素都是含3個Int的數組void fun(int a[][3]) √ :我是個數組,我的每個元素都是含3個Int的數組
void fun(int (*a)[3]) √ :我是個指向數組的指針,我指向的那個數組含3個Int
void fun(int a[2][]) × 編譯器:我不知道你每個元素的大小
void fun(int a[][]) ×
void fun(int* a[3]) × :我是一個Int* 類型的數組,我的每個元素都能指向一個Int
二維數組的指針:
先看看一維的:
Int a[5] = {1,2,3,4,5};
int *p = a;
*(p + 2) 或 a[2] 就是3
再看看二維的:
int a[2][3] = { {1, 2} ,
{3, 4, 5} };
Int (*p)[5] = a; // 含有5個int元素的數組 的 指針
*(*(p + i) + j ) 或 a[i][j] 訪問各int值
*(p + i) 或 a[i] 訪問各行
舉個例子幫助理解:
char a[2][10] = {"first","second"};
printf("%s", *a + 1);//輸出irst
printf("%s", *(a+1) );//輸出second
你也可以聲明一個直接指向int的指針
方法一:int* p = &a[0][0]; //簡單易懂,就是把int取址賦值給p
方法二:int* p = a[0];//參照最上面的關係圖,a[0]就是a[0][0]的地址
#第一次寫,可能許多地方寫得不是很好(或許還有錯的呢)歡迎指正。