關於二維陣列在函式中呼叫的問題 高手幫幫忙

時間 2022-02-01 17:59:05

1樓:匿名使用者

很遺憾的告訴你,c++中2維陣列是不能當引數的.所以能,如果你想把乙個2維陣列的值給傳過去,有下列兩種方法,

根據你上面的寫法:

1.獲取引數的時候,標明引數中陣列的列已經知道,如下:

#include

void print(int a[3]) //直接用a是不行的.

void main()

; print(a);

}2.強制把2維,轉為一維,再傳(這種方法不太好)void print(int *a)

void main()

; print((int *)a);

...}

2樓:匿名使用者

#include

void print(int **a) /*error: parameter 是引數的意思,這兒形參應該是int*a (或 int[3]),c++規定,無論是一維還是多維陣列,其陣列名組第都只是該數乙個元素的記憶體位址,或者說是一級指標,而不是多級的。二維陣列名也只是一級指標,用int*,而不是int** */

void main()

; print(a);}

c語言,如何在子函式中寫乙個3*3二維陣列,給主函式呼叫!!

3樓:聽不清啊

這樣就可以了:

#include

#include

int **sr(void)

return arr;

}int main(void)

return 0;}

4樓:自我程式設計

在子函式申請二維陣列,主函式使用,可以用動態申請。

方法不止一種,我這裡用指標的指標實現二維陣列。

二維陣列除了行列,本身位址也是連續的,從第一行第一列的元素位址++,可以取出所有元素。所以我這裡先申請了完整的連續位址。

#include

#include

int ** sr(void)

for(i=0,j=0;i<9;i+=3)//將連續位址按列數,取出每行首位址,賦值給二維陣列元素

arr[j++]=&memory[i];

for(i=0;i<3;i++)

for(j=0;j<3;j++)

scanf("%d",&arr[i][j]);

return arr;

}int main(void)

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

5樓:我們最2的人

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

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

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

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

6樓:韌勁

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

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);

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

7樓:匿名使用者

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

#include

#define n 3

int array[n][n];

void main()

//呼叫矩陣轉置函式

convert(array);

printf("\n");

for(i=0;i

void convert(int array[3]) }

8樓:混世達人

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

9樓:匿名使用者

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

10樓:匿名使用者

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

c關於二維陣列的問題

include stdafx.h include conio.h include using namespace std void matrixchain int p,int n,int m 7 7 int s 7 7 void traceback int i,int j,int s 7 7 int...

定義二維陣列4 4,二維陣列中的陣列元素都用鍵盤賦值。求出該二維陣列中主對角線的和C語言

include stdio.h include conio.h include stdlib.h main for i 0 i 4 i printf 此矩陣主對角線的和為 d n num include define m 4 int main int i,j,a m m sum 0 for i 0 ...

二維陣列的位址問題,二維陣列位址問題,求詳解

1 a 0 0 為0行0列元素的首位址,a 0 n為0行第n個元素位址,那麼a 0 是表示0行首元素位址嗎?正確,a 0 就是0行首位址。a 0 是零行的首位址,實際上行的位址也只有乙個,也無所謂0行的首位址吧?a 0 值上,是和a 0 相同的,不過型別不一樣。a 0 等效於int 型,實際上是指向...