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...