關於二維陣列當做函式引數的問題

2021-07-22 23:32:00 字數 1262 閱讀 4031

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

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

voidf(intarray[3][10]);//正確

voidf(intarray[10]);//正確

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

voidf(intarray);//錯誤

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

voidf(intarray[3]);//錯誤

3、二維陣列作為實參傳遞時,必須保證實參第2維的維數與形參第2維的維數相同,因為必須要保證形參和實參的資料型別一致。比如定義如下函式:

voidf(intarray[10]);

可以將如下陣列傳遞給函式f

inta[2][10] = ;

intb[4][10] = ;

如果第二維是固定的,可以類似fun(char* p[4])這樣的方式,如果不確定,那麼就用二級指標,同時要用乙個引數傳遞第二維的大小,類似fun(char** p, unsiged col),同時在表示其中乙個元素時,不能使用p[i][j]這樣的寫法,必須自行計算出其偏移位置.

大家可以看到,將二維陣列當作引數的時候,必須指明所有維數大小或者省略第一維的,但是不能省略第二維或者更高維的大小,這是由編譯器原理限制的。大家在學編譯原理這麼課程的時候知道編譯器是這樣處理陣列的:

對於陣列 int p[m][n];

如果要取p[i][j]的值(i>=0 && i

C 陣列 二維陣列 函式引數

一維陣列 1 include 2 using namespace std 3int main 4 7 通過指標的方式訪問陣列 8 int p numbers 9 cout 普通指標的方式訪問 n 10for int i 0 i 5 i 11 cout p i 12 cout 13 14 在這裡面nu...

二維陣列 作為函式引數

前言 今天在實現裝配線排程程式時候,用到了二維陣列,並將其作為函式的引數。在寫程式的時候,遇到一些問題,即二維陣列做函式的引數應該如何正確表示。我寫程式的錯誤如下程式所示 1 include 2 void print int a 3 3 67intmain 8 10print a 11return0...

C 中關於二維陣列作為函式引數傳遞的問題

在做資料結構迷宮實驗的時候,要生成乙個二維陣列儲存迷宮資料,為了保證程式的模組化,將生成部分單獨放進乙個函式migongsc 裡。大致 如下 問題的關鍵就集中在了如何將主函式中宣告的二維陣列migong 8 9 傳遞到自定義函式中去。方法1 模擬編譯器定址 本法來自csdn部落格,原文 大體意思為 ...