c - 二维数组函数问题

标签 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] 但随后只有当输入的二维数组的大小为 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/

相关文章:

c - C中的多线程TCP服务器

python - 使用 distutils 构建 C 扩展时打印编译器和链接器命令

c - C 结构体数组的实现

javascript - 用数组中的元素替换字符 "* "的实例 - JavaScript

python - 为什么 **kwargs 映射与不同顺序的 OrderedDict 比较相等?

C++如何测试函数使其抛出错误?

c - main的多重定义;项目只有一个主要项目

c - 使用 C 将文本文件中的内容扫描到 2 个数组中

android - 应用程序可处理大数组 “stops working”,但仍继续将日志消息打印到AndroidStudio

javascript - 设置 Google map 以在加载时对邮政编码进行地理编码