今天寫程式的時候要用到二維陣列作引數傳給乙個函式,我發現將二維陣列作引數進行傳遞還不是想象得那麼簡單裡,但是最後我也解決了遇到的問題,所以這篇文章主要介紹如何處理二維陣列當作引數傳遞的情況,希望大家不至於再在這上面浪費時間。
正文:
首先,我引用了譚浩強先生編著的《c程式設計》上面的一節原文,它簡要介紹了如何
將二維陣列作為引數傳遞,原文如下(略有改變,請原諒):
[原文開始]
可以用二維陣列名作為實參或者形參,在被呼叫函式中對形引數組定義時可以指定所有維數的大小,也可以省略第一維的大**明,如:
void func(int array[3][10]);
void func(int array[10]);
二者都是合法而且等價,但是不能把第二維或者更高維的大小省略,如下面的定義是不合法的:
void func(int array);
因為從實參傳遞來的是陣列的起始位址,在記憶體中按陣列排列規則存放(按行存放),而並不區分行和列,如果在形參中不說明列數,則系統無法決定應為多少行多 少列,不能只指定一維而不指定第二維,下面寫法是錯誤的:
void func(int array[3]);實參陣列維數可以大於形引數組,例如實參陣列定義為:
void func(int array[3][10]);
而形引數組定義為:
int array[5][10];
這時形引數組只取實參陣列的一部分,其餘部分不起作用。
[原文結束]
大家可以看到,將二維陣列當作引數的時候,必須指明所有維數大小或者省略第一維的,但是不能省略第二維或者更高維的大小,這是由編譯器原理限制的。大家在學編譯原理這麼課程的時候知道編譯器是這樣處理陣列的:
對於陣列 int p[m][n];
如果要取p[i][j]的值(i>=0 && ic/c++二維陣列的傳參方法總結
二維陣列指標傳參
希望能幫助到你,我將無比快樂。你的點讚 是我前進的動力。初遇二維陣列作函式引數,宛如自己化身為了大頭兒子。很頭大。在此,我要撥開這些問題的一些迷霧。我相信,有心人看完後,再遇就不會怕了。其實宣告,定義是一樣的。因此,只寫宣告。同時,把元素外層 剝去就代表位址。因此只寫元素。最後有總結。二維陣列作函式...
二維陣列動態申請與傳參
今天在寫八皇后時遇到了一些小問題,下面整理一下。用二階指標來申請 include include 這裡只做申請 void makedoublearray int row,int col for i 0 i row i free array void main void 用二維陣列指標申請 inclu...
C語言 二維陣列 形參傳值寫法
為什麼 寫成map max max 或者map max 就可以 而寫成map max 或者map就不行?編譯器實際處理多維陣列是把一維陣列分段處理的,也就是說實際上並不存在多維陣列,多維陣列僅僅是個邏輯概念,所以行下標改變時,編譯器必須知道有多少列,以計算偏移位址 如果是map max 的話,假設目...