编程新手。试图将任意大小的数组读入函数...似乎无法使代码正常工作...“数组类型具有不完整的元素类型‘int[]’
void printArray(int array[][], int size, int *sumArrayRight, int *sumArrayBot){
int i, j;
for(i = 0; i <size; i++){
for(j = 0; j <size; j++){
if(array[i][j] != -1)
printf("%3d ", array[i][j]);
else
printf(" ~ ");
if(j == size-1)
printf("%3d", *(sumArrayRight+i));
}
printf("\n");
}
for(i = 0; i < size; i++)
printf("%3d ", *(sumArrayBot+i));
printf("\n");
}
只有当我已经给数组一个大小时它才有效,例如/int array[10][10] 但随后只有当输入的二维数组的大小为 10 时它才有效...
最佳答案
为此您需要使用 VLA(可变长度数组);这些是在 C99 中引入的,在 C11 中成为可选的,但在 C11 中仍然广泛可用。您可以将 -std=c99
编译器标志与 gcc 一起使用,以指定将代码编译为 C99 标准。
声明 VLA 时,可以使用变量作为维度。但是,请注意尺寸在声明后不能更改:
int my_array[rows][cols];
对于这种特殊情况,如果数组的大小在编译时未知,但在运行时确定,则将此大小存储在一个变量中,并使用它来声明 VLA:
size_t arr_sz;
/* Code to determine array size */
int array[arr_sz][arr_sz];
要将 VLA 传递给函数,您需要在参数列表中的数组名称之前传递数组维度。请注意,size_t
是数组大小的正确类型,因为这是保证包含任何数组索引的 unsigned
类型。函数原型(prototype)应如下所示:
void printArray(size_t size, int array[size][size], int *sumArrayRight, int *sumArrayBot);
那么函数调用将是:
printArray(arr_sz, array, sumArrayRight, sumArrayBot);
关于c - 二维数组函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43971088/