您的位置:首页 > 其它

如何将二维数组作为参数传给一个函数

2013-06-18 16:18 351 查看
因为栈上分配的数组和堆上分配的数组在内存排列上可能不相同。栈上:

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 );

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: