參考鏈結
問題在c++語言中實際上沒有真正的多維陣列,所謂的多維陣列實際上是陣列的陣列。
和所有陣列一樣,當將多維陣列傳遞給函式時,真正傳遞給函式的是指向陣列首元素的指標。因為我們處理的是陣列的陣列,所以首元素本身就是乙個陣列,指標就是乙個指向陣列的指標。將二維陣列作為引數進行傳遞時,必須指明所有維數大小或者省略第一維的,但是不能省略第二維或者更高維的大小。
以下幾種是正常的傳遞方式:
void fun1(int arr[10][10]);
void fun2(int arr[10]);
但是下面這種傳遞方式是錯誤的:
void fun3(int ); //必須指明第二維的大小
當我們需要使用第三種傳遞方式時,應該怎麼做呢?
解決方案
給出示例:
#include
#include
using
namespace
std;
void fun(int *a, int m, int n)
}}int main()
; for (int i=0; ifor (int j = 0; j1;}}
cout
<< "before : "
<< endl;
for (int i=0; ifor (int j=0; jprintf("%d ", a[i][j]);
}cout
<< endl;
}cout
<< endl;
fun((int *)a, m, n);
cout
<< "after : "
<< endl;
for (int i=0; ifor (int j=0; jprintf("%d ", a[i][j]);
}cout
<< endl;
}cout
<< endl;
}
最後的結果為:
引數傳遞二維陣列
cpp view plain copy void func1 intiarray 10 intmain 編譯通過,注意形參宣告一定要給出第二個維度的大小,要不編譯不過。cpp view plain copy void func2 int parray 10 void func2 1 int parr...
引數傳遞二維陣列
來看 c primer 中給出的方法 void func1 int iarray 10 int main 編譯通過,注意形參宣告一定要給出第二個維度的大小,要不編譯不過。void func2 int parray 10 void func2 1 int parray 編譯通過,無法呼叫 int ma...
引數傳遞二維陣列
來看 c primer 中給出的方法 cpp view plain copy void func1 intiarray 10 intmain 編譯通過,注意形參宣告一定要給出第二個維度的大小,要不編譯不過。cpp view plain copy void func2 int parray 10 vo...