二維數組 指針 形參 用一個關係圖解決問題

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]的地址



#第一次寫,可能許多地方寫得不是很好(或許還有錯的呢)歡迎指正。


發佈了21 篇原創文章 · 獲贊 14 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章