1. 程式人生 > >如何將二維陣列作為引數傳給一個函式

如何將二維陣列作為引數傳給一個函式

因為棧上分配的陣列和堆上分配的陣列在記憶體排列上可能不相同。棧上:
int ia[2][2] = {2,3,4,5};  //4個元素是連續排列的記憶體段
堆上:
int **p = new int*[2];    //只有每行內是連續排列,各行並不一定連續排列
    for ( int i = 0; i < 2; i++ )
    {
        p[i] = new int[2];
    }
    for ( int i = 0; i < 2; i++ )
    {
        for ( int j = 0; j < 2; j++ )
        {
            p[i][j] = ia[i][j];

        }
    }

所以對棧上的陣列用int **p指向首地址,因為int **p一次解引用為地址指標,而非堆上的指向陣列的指標,所以二次解引用會出錯。
如果找一個通用方程只能用:
void f( int *p, int row, int col )  //給出陣列的行和列,對堆上的陣列不合適 
{
    for ( int i = 0; i < row; i++ )
    {
        for ( int j = 0; j < col; j++ )
        {
            cout << p[i * row + j] << " ";            

        }
        cout << endl;
    }
}

int main(){
  //.........
  int ia[2][2] = {2,3,4,5};
  f( (int*)ia, 2, 2 );
}