C++ 函數與二維數組


int data[3][4]= {{1,2,3,4},{1,2,3,4},{1,2,3,4}};

定義了一個三行四列的數組

這個二維數組可以解釋為:

有3個指向數組的指針, 每個指針指向一個  數組, 每個數組包含 4 個int 元素.

假如此時有一個sum 函數, 作用是計算這個二維數組的和

那么調用sum函數時, 代碼應為 sum( data , int size);

那么 sum函數的原型是什么呢:

原型如下: (原型即函數的定義)

int sum(int (*ar2)[4] , int size );

為什么將二維數組作為形參時, 只有第一個方括號需要用符號表示, 而第二個方括號用具體的常量表示呢?

原因如下:

當 代碼寫出int data[3][4]時,  data就會被認為是一個數組的指針, 指向一整個含有四個元素的數組.  這樣的數組共有3個

 

當理解了上面的這兩句話之后, 就可以理解為什么sum需要這樣調用了

ar2 是一個指向數組的指針, data也是指向數組的指針, 所以調用sum函數時, 可以直接傳遞data作為實參  , size 就是data數組的長度, 就是3

其中, 括號不能少, 如果少加一個括號, 變為 int *ar[4]  代碼的意義將有很大的改變, 此時代碼的意義為:

只有一個數組,  這個數組的內容是  四個 int* 指針. 

可以形象的理解為  | int* | int* | int* | int* |

而int (*ar2)[4]  的意思為:

 | 含有四個int元素的數組 | 含有四個int元素的數組 | 含有四個int元素的數組 | 含有四個int元素的數組 |

為了更加便於理解, 可以將int sum(int (*ar2)[4] , int size ); 改寫為

int sum(int ar2[][4] , int size );

這樣寫的可讀性更強. 可以輕松的理解為,  這是一個二維數組, 只是行數沒有指定, 值為空, 數組名為ar2, 而數組的實際長度, 需要由size 指定. 

但是不論哪一種寫法 , 他們都有相同的意義:

 ar2是指針, 而不是數組 !

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM