通过我创建的函数创建用户输入矩阵时遇到了一些麻烦。功能如下:
int create(int l, int c, int one[MAX][MAX])
{
for(int i = 0; i < l; ++i)
for(int j = 0; j < c; ++j)
scanf("%d", &one[i][j]);
}
然后我继续从main调用我的函数:
int main()
{
int mat[MAX][MAX];
int lines, collumns;
printf("Input # of lines, columns:\n");
scanf("%d %d", &lines, &collumns);
create(lines, collumns, mat[MAX][MAX]);
}
奇怪的是,如果我将函数复制到main并且只是这样运行它,它可以正常工作。但是,如果我通过函数调用尝试这样做,它将无法工作,因为我的程序崩溃了。我做错了什么人?
答案 0 :(得分:2)
更改
create(lines, collumns, mat[MAX][MAX]);
到
create(lines, collumns, mat);
再试一次。
答案 1 :(得分:0)
好吧,当将多维数组传递给C中的函数时,基本规则是
您应该为第一个维度以外的每个维度指定值。
因此,当您传递2D数组时,请按此定义。
int create( int l, int c, int one[][MAX] ){...}
传递3D数组时,请按此定义。
int create3D( int x, int y, int z, int mat[][MAX_Y][MAX_Z] ){...}
在调用函数时,您只需指定数组变量的名称。无需指定尺寸。
create( l, c, one );
create3D( x, y, z, mat );
如果使用-Wall
中的gcc
开关进行编译,则可以看到这些错误/警告。
祝你好运!