c++之所以強大,其中重要原因之一就是支援指標,然而這也是c++最令人頭痛的問題之一,其中二維陣列作為引數傳遞就是其中之一。
一、關於一維陣列
c++中一維陣列作為函式引數傳遞應用十分普遍,原理和操作都十分簡單。陣列名就代表了陣列的首位址,下標就是偏移量。函式的形式引數宣告為一級指標即可(type *),而實參就是陣列名。
二、擴充套件到二維陣列
一維的情況解決了,接下來擴充到二維的情形。思路同前,採用二級指標引用二維陣列(type**)從而得到如下程式:
#include "stdafx.h"
#include
using namespace std;
void test(int m[15],int i,int j){
for(int a=0;aint print(int m[15],int i,int j){
for(int a=0;a
可是對左邊的程式進行編譯卻會報告錯誤: 錯誤 1 error c2664: 「test」: 不能將引數 1 從「int [15][15]」 轉換為「int **」
呵呵,問題來了吧,不能將這個二維陣列轉化而二級指標。好,既然這樣,那我就把形參宣告為二維陣列而不是二級指標。對左邊函式宣告修改如下:
void test(int **m,int i,int j) 改為:
void test(int m,int i,int j)
可是這樣一來有出現了新的問題: 不能將引數 1 從「int [15][15]」 轉換為「int [1]
原來陣列大小匹配不了,於是很容易想到將地二維大小明確給出,而不是預設值。
void test(int m[15],int i,int j)
ok搞定!
上面的解決方案雖然解決了燃眉之急,但畢竟不優雅,因為作為函式你必須保證宣告了足夠大的空間,但是究竟多大才是安全的呢?誰也不知道。下面的解決方案就優雅得多了
#include "stdafx.h"
#include
using namespace std;
void test(int **m,int i,int j){
for(int a=0;aint print(int **m,int i,int j){
for(int a=0;a
C 傳遞陣列引數 一維陣列 二維陣列
using system using system.collections.generic using system.linq using system.text using system.threading.tasks namespace 1206 傳遞陣列引數 一維陣列 二維陣列 i,array...
二維陣列的傳遞
可以用二維陣列名作為實參或者形參,在被呼叫函式中對形引數組定義時可以指定所有維數的大小,也可以省略第一維的大 明,如 void func int array 3 10 void func int array 10 二者都是合法而且等價,但是不能把第二維或者更高維的大小省略,如下面的定義是不合法的 v...
引數傳遞二維陣列
cpp view plain copy void func1 intiarray 10 intmain 編譯通過,注意形參宣告一定要給出第二個維度的大小,要不編譯不過。cpp view plain copy void func2 int parray 10 void func2 1 int parr...