我正在尝试将二维数组传递给函数。我没有麻烦将它传递给函数。但我很难理解这背后的逻辑。功能和主要定义如下:
// Function to print the two-dimensional array
void print(int x, int y, int a[x][y]){
printf("\n");
int i, j;
for(i = 0; i < x; i++){
for(j = 0; j < y; j++)
printf("%d ", a[i][j]);
printf("\n");
}
}
// Function to initialize the two-dimensional array
void init_2d(int *a, int x, int y){
int i, j;
for(i = 0; i < x; i++){
for(j = 0; j < y; j++){
a[i*y + j] = i + j;
}
printf("\n");
}
}
int main(){
int m = 2, n = 3;
int a[m][n]; // a two dimensional whose size has been defined using m and n
init_2d(a, m, n);
print(m, n, a);
}
具有讽刺意味的是,一切都运行良好。那是我的问题,因为我无法消化它的逻辑。
主要问题是:
- 我在书中读到的是,二维数组的大小应该使用常量或符号常量来定义。在我的主要工作中,我正在使用变量定义二维数组
m
,n
但它工作正常。为什么? - 我还被告知通过将二维数组衰减为一维数组(通过在函数中将其定义为指向 int 的指针)来传递二维数组,即我在函数中所做的方式
init_2d
。但在print
函数中,我使用的是二维数组,其大小已使用变量x
和y
. 这样做可以吗? - 是否也可以使用指向指针的指针来遍历二维数组?
任何人都可以建议我好好读一下这个主题,它可以清除我所有的概念吗?
我正在使用代码块来编译我的代码,编译器是GNU GCC Compiler。