c語言中怎麼用二維陣列作為函式引數

2021-03-05 09:22:09 字數 2002 閱讀 2232

1樓:我們最2的人

二維陣列作為函式引數,實參可以直接使用二維陣列名,在被呼叫函式中對形引數組定義可以指定所有維數的大小,也可以省略第一維的大**明,如:

它們是合法且等價,也可以使用如下形式:

但不能省略第二維的大小,如下面的定義是不合法的,編譯時會出錯:

因為從實參傳遞來的是陣列的起始位址,如果在形參中不說明列數,編譯器將無法定位元素的的位置。

2樓:韌勁

可以用二維陣列名作為實參或者形參,在被呼叫函式中對形引數組定義時可以指定所有維數的大小,也可以省略第一維的大**明,如:

void func(int array[3][10]);

void func(int array[10]);

二者都是合法而且等價,但是不能把第二維或者更高維的大小省略,如下面的定義是不合法的:

void func(int array);

因為從實參傳遞來的是陣列的起始位址,在記憶體中按陣列排列規則存放(按行存放),而並不區分行和列,如果在形參中不說明列數,則系統無法決定應為多少行多 少列,不能只指定一維而不指定第二維,下面寫法是錯誤的:

void func(int array[3]);實參陣列維數可以大於形引數組,例如實參陣列定義為:

void func(int array[3][10]);

而形引數組定義為:

int array[5][10];

這時形引數組只取實參陣列的一部分,其餘部分不起作用。

對於陣列 int p[m][n];

如果要取p[i][j]的值(i>=0 && i

p + i*n + j;

void func(int array[3][10]);

void func(int array[10]);

變為:void func(int **array, int m, int n);

在轉變後的函式中,array[i][j]這樣的式子是不對的(不信,大家可以試一下),因為編譯器不能正確的為它定址,所以我們需要模仿編譯器的行為把array[i][j]這樣的式子手工轉變為:

*((int*)array + n*i + j);

在呼叫這樣的函式的時候,需要注意一下,如下面的例子:

int a[3][3] =

, ,};func(a, 3, 3);

根據不同編譯器不同的設定,可能出現warning 或者error,可以進行強制轉換如下呼叫:

func((int**)a, 3, 3);

其實多維陣列和二維陣列原理是一樣的,大家可以自己擴充的多維陣列,這裡不再贅述。寫到這裡,我先向看了這篇文章後悔的人道歉,浪費你的時間了。下面是一 個完整的例子程式,這個例子程式的主要功能是求乙個圖中某個頂點到其他頂點的最短路經,圖是以鄰接矩陣的形式存放的(也就是乙個二維陣列),其實這個函式 也是挺有用的,但是我們這篇文章的重點在於將二維陣列作為函式的引數傳遞。

3樓:匿名使用者

很簡單的,陣列作為函式引數傳遞的時候只要是陣列名就可以了,因為陣列名本身就是陣列的首位址 .給個程式看看

#include

#define n 3

int array[n][n];

void main()

//呼叫矩陣轉置函式

convert(array);

printf("\n");

for(i=0;i

void convert(int array[3]) }

4樓:混世達人

建議這樣的專業語言問題,去**群的c語言群去諮詢,那裡面有很多的高手。

5樓:匿名使用者

直接就寫陣列的名稱就可以了,比如你定義的陣列是a[4][3],在實參中填a就可以,在型參中定義乙個二維陣列或乙個指標變數就可以讓二維陣列的值在函式中使用了!

6樓:匿名使用者

可以用指標的形式表示,或者用二維陣列顯示表示

C語言指標與二維陣列求解,c語言中二維陣列的指標如何表示

假設a是乙個二維陣列,則一 a是第乙個一維陣列名,陣列名 就是該陣列的 首位址!二 a 0 和 a都表示這個一維陣列第乙個元素的內容 這句話有問題,應該是 都表示這個 二維陣列 第乙個元素的內容!三 a和a好像不等價啊?關於陣列名和 陣列名書上有明確的介紹與說明 a a a 0 a 0 這是規定!細...

c語言中,定義了二維陣列a,當呼叫函式fun a

你的fun a 中a是什麼資料型別?無論哪種資料型別,a這種資料型別不存在,你自然不能把它當作形參了!a 表示乙個指向指標的指標標量a,後兩種是函式傳參的形式,是語言定義的規範。可直接將a定義為乙個指標型別,直接傳參 如 typedef a n m p2 darray p2 darray fan p...

c語言 二維陣列指標中的和,C語言 二維陣列指標中的 和

要回答你的這個問題,不妨先根據你的問題先編寫一段小的示例程式 include include using namespace std int a 3 4 int main 這段示例程式在我本地上執行的結果為 a i 0 4214816 a i 4214816 a i 4214816 a i 0 42...