c++ -- 二維陣列引數傳遞
阿新 • • 發佈:2018-11-29
都知道,陣列名和函式名一樣,可以當做指標(普通指標和函式指標)來用。
關於二維陣列做為形參宣告和實參傳遞,直接看程式碼:
#include <iostream> using namespace std; /*傳二維陣列*/ //第1種方式:傳陣列,第二維必須標明 /*void display(int arr[][4])*/ void display1(int arr[][4],const int irows) { for (int i=0;i<irows;++i) { for(int j=0;j<4;++j) { cout<<arr[i][j]<<" "; //可以採用parr[i][j] } cout<<endl; } cout<<endl; } //第2種方式:一重指標,傳陣列指標,第二維必須標明 /*void display(int (*parr)[4])*/ void display2(int (*parr)[4],const int irows) { for (int i=0;i<irows;++i) { for(int j=0;j<4;++j) { cout<<parr[i][j]<<" "; //可以採用parr[i][j] } cout<<endl; } cout<<endl; } //注意:parr[i]等價於*(parr+i),一維陣列和二維陣列都適用 //第3種方式:傳指標,不管是幾維陣列都把他看成是指標 /*void display3(int *arr)*/ void display3(int *arr,const int irows,const int icols) { for(int i=0;i<irows;++i) { for(int j=0;j<icols;++j) { cout<<*(arr+i*icols+j)<<" "; //注意:(arr+i*icols+j),不是(arr+i*irows+j) } cout<<endl; } cout<<endl; } /***************************************************************************/ /* //第2種方式:一重指標,傳陣列指標void display(int (*parr)[4]) //缺陷:需要指出第二維大小 typedef int parr[4]; void display(parr *p) { int *q=*p; //q指向arr的首元素 cout<<*q<<endl; //輸出0 } typedef int (*parr1)[4]; void display1(parr1 p) { cout<<(*p)[1]<<endl; //輸出1 cout<<*p[1]<<endl; //輸出4,[]運算子優先順序高 } //第3種方式: void display2(int **p) { cout<<*p<<endl; //輸出0 cout<<*((int*)p+1+1)<<endl; //輸出2 } */ int main() { int arr[][4]={0,1,2,3,4,5,6,7,8,9,10,11}; int irows=3; int icols=4; display1(arr,irows); display2(arr,irows); //注意(int*)強制轉換.個人理解:相當於將a拉成了一維陣列處理。 display3((int*)arr,irows,icols); return 0; }
推薦使用第2種方式,簡單明瞭!