c 裡二維陣列怎麼傳值給函式?格式是怎麼樣的

2022-02-26 21:33:10 字數 3896 閱讀 6650

1樓:匿名使用者

ls幾個真是太不負責任了, 想當然的int** ??

為什麼不自己親自try it ?

一般來說陣列的傳遞方法應該是這種形式的

void function(type arrayname[a][b]...[c])

如果是一維陣列 void f(type n) (簡寫)

二維 void f(type n[a]) ,這裡a是乙個數

以此類推

lz這裡就應該是void gaibian(int b[2])

我們平時經常可以看到void f(type* n)這樣的形式,用來傳遞陣列。

然而實際上這只是種取巧的手段,因為陣列某種程度上和指標是等價的。

上面那種形式的真正意義應該是「傳遞指標」。

應該再明確一點:

是陣列的名字和指標變數的操作方式很相似。

譬如int a[10], 與 int* a;

都可以用 *(a+i) 與 a[i] 這兩種索引方法

如果對於多維陣列就不完全一樣了

譬如int a[10][10]; int* b;

b=a;

那麼 a[i][j] 與 b[10*i+j]是相等的。

因此lz的函式也可以改成這樣子:

void gaibian(int* b)

編譯可以通過, 但會受到乙個警告「int *」與「int [2][2]」的間接級別不同

whatever, 陣列引數絕對不應該有type** 這種型別..

剛才看資料, 發現還有一種形式, 應該說更接近本質的形式

void function(type (*arrayname)[a][b]...[c])

它與void function(type arrayname[a][b]...[c])

不同之處就是arrayname換成了(*arrayname)

意思都差不多, 效果也差不多。

2樓:廖惠

換個角度來看這個問題吧,一維陣列的陣列名實際上就是訪問這個陣列的入口指標,樓主給出的第乙個示例**中實際上就是將一維陣列的入口指標作為引數傳遞給函式而已。二維陣列相當於是乙個儲存著陣列的陣列,其陣列名也一樣是訪問其的指標,只不過由於是指向(其內儲存的)陣列的指標,也就相當於是乙個儲存指標的指標,所以其型別就應當在一維陣列的指標型別之上作一點變化,即從xx *p變為xx **p。樓主已經知道了怎樣將一維陣列作為引數傳入函式,相信現在應該不難明白怎樣傳入二維或多維陣列了。

3樓:匿名使用者

void gaibian(int b)或者void gaibian(int **b)

4樓:匿名使用者

參考此

c++中二維陣列作為引數傳遞到乙個函式

5樓:楊柳風

可以傳遞二維陣列作為引數,有兩種方法,

方法一change(int **a)直接傳遞乙個指標進去方法二change(int a[10])陣列的第二維維度一定要顯式指定

假如主函式有乙個二維陣列int a[10][18];

寫乙個函式要傳遞二維陣列,函式原型應該是這個樣子void f(int (*)a[18]);

或者 void f(int a[18]) 必須確定第二維長度是多少

c/c++怎樣向函式傳遞二維陣列的引數?

6樓:

假如主函式有乙個二維陣列int a[10][18];

寫乙個函式要傳遞二維陣列,函式原型應該是這個樣子void f(int (*)a[18]);

或者 void f(int a[18]) 必須確定第二維長度是多少

7樓:一騎當後

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

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

void func(int array[10]);

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

void func(int array);

8樓:低調明哥

引數可以直接使用二樓那位說的那樣,就是引數就是陣列。但是實際上印象中是陣列做引數之後實際得到的也是該陣列的指標,也就是首位址,所以直接用指標就可以了其實

c語言中如何將二維陣列作為函式的引數傳遞

9樓:鄞臨婁溶溶

在c語言中可以用二維陣列作為實參或者形參。

1、函式中用二維陣列作為形參,函式宣告中可以指定所有維數的大小,也可以省略第1維的維數如:

void f(int array[3][10]); //正確

void f(int array[10]); //正確上面的兩種二維陣列形參表示都是正確的。

2、函式中用二維陣列作為形參,不能把第2維或者更高維的大小省略,如下面的定義是不合法的:

void f(int array); //錯誤

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

void f(int array[3]); //錯誤 3、二維陣列作為實參傳遞時,必須保證實參第2維的維數與形參第2維的維數相同,因為必須要保證形參和實參的資料型別一致。比如定義如下函式:

void f(int array[10]);可以將如下陣列傳遞給函式f。

int a[2][10] = ;

int b[4][10] = ;

10樓:匿名使用者

函式原型 type fun (type (name*)[size])type是你要定義的型別,fun是函式名,name是在函式中二維陣列的名字,

size是二維陣列第2維的長度。

這樣呼叫這個函式只需要把二維陣列函式名傳遞就可以了。

11樓:文正

int fun(int **i);

fun是函式名,i就是二維資料名.

c++中二維陣列在函式中傳遞時形參和實參應該怎麼寫

12樓:匿名使用者

形參使用指向陣列的指標,實參直接用陣列名。

樣例**:

/* 注意列數必須要給出來,因為程式要計算(a+1)的位置就必須知道列數 */

int foo1(int (*a)[10])/* 形參本質上仍是指向陣列的指標,只是寫成了陣列的形式 */int foo2(int a[10][10])/* 如上,既然本質上是指向陣列的指標,行數就可以省略 */int foo3(int a[10])

#include

int main()

; // 陣列元素全初始化為0

a[1][0] = 1;

/* 以下三條語句均成功輸出1 */

std::cout << foo1(a) << std::endl;

std::cout << foo2(a) << std::endl;

std::cout << foo3(a) << std::endl;

return 0;}

13樓:兩極漂流

#include

using namespace std;

void print( char b[ length ] );

int main()

void print( char b[ length ] )傳遞時二維陣列大小不能為止,特別是陣列的最後乙個的寬度。否則報錯。

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

二維陣列作為函式引數,實參可以直接使用二維陣列名,在被呼叫函式中對形引數組定義可以指定所有維數的大小,也可以省略第一維的大 明,如 它們是合法且等價,也可以使用如下形式 但不能省略第二維的大小,如下面的定義是不合法的,編譯時會出錯 因為從實參傳遞來的是陣列的起始位址,如果在形參中不說明列數,編譯器將...

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

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

怎麼把二維陣列中的數值賦給一維陣列

單迴圈也可以 include int main void b 4 i for i 0 i 4 i return 0 用雙迴圈賦值吧,比如 int a 3 3 int b 9 int k 0 for int i 0 i 3li for int j 0 j 3 j var a array 1.100,1...