二维阵列功能问题

时间:2017-05-15 03:13:57

标签: c arrays function compiler-errors 2d

编程很新。试图将函数读入任何大小的数组......似乎无法使代码工作......“数组类型具有不完整的元素类型'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时才有效...

1 个答案:

答案 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);