二维数组传参及引用格式简化
C语言中,二维数组的参数传递是一个比较复杂繁琐的问题,尤其是动态申请的二维数组。
动态申请二维数组、传递参数及引用的一般过程如下
1、在函数M中动态申请一个数组matrix[row][col]
2、函数M调用函数Func,并用matrix作为参数,形如Func(matrix[0], row, col)
3、在函数Func(int *m, int row, int col)中这样使用二维数组
读取m[i][j],只能用*(m + i*col +j)来引用
下面我用一种方法让数组matrix在函数Func中一样如matrix[i][j]的简便形式引用。
int **citePointer(int *matrix, int row, int col)
{
int i, **m;
m = (int**)malloc(sizeof(int)*row);
for(i=0; i<row; i++)
m[i] = (matrix +i*col);
return m;
}
void initMatrix(int *matrix, int row, int col)
{
int **m;
m = citePointer(matrix, row, col);
int i, j;
for(i=0; i<row; i++)
for(j=0; j<col; j++)
m[i][j] = 119;
}
用这种方法,空间开销多了一个指针数组,大小是二维数组的行数。
留下评论