C 傳遞二維陣列

2021-08-25 10:43:33 字數 1135 閱讀 4270

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