编程很新。试图将函数读入任何大小的数组......似乎无法使代码工作......“数组类型具有不完整的元素类型'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]但是随后只有在输入的2D数组大小为10时才有效...
答案 0 :(得分:2)
您需要使用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
类型,可以保证包含任何数组索引。函数原型应如下所示:
void printArray(size_t size, int array[size][size], int *sumArrayRight, int *sumArrayBot);
然后函数调用将是:
printArray(arr_sz, array, sumArrayRight, sumArrayBot);