在 C 中创建未知大小的全局二维数组

标签 c arrays global-variables global

我正在尝试用 C 语言创建一个全局二维整数数组,但我不太确定该怎么做。对于一维数组,你可以简单地把

int numbers[];

但显然你不能像这样将两个括号留空

int numbers[][];

那我该怎么做呢?我不确定有什么简单的方法。

谢谢!

最佳答案

为了构造一个二维数组,想法是创建一个扁平化的二维数组 (因此,一个一维数组)。这实际上意味着所有列都将水平放置,一列接一列。您需要计算索引才能访问元素。

假设您的数组将有 N行和 M列。您不能将其声明为:

int numbers[N][M];

您可以做的是将其声明为:

int numbers[N*M];

因此您的元素将在 [0, N*M-1] 范围内。然后,您可以使用索引访问数组的任何元素:

i*M + j;       

哪里0 <= i <= N-10 <= j <= M-1 .


但是,鉴于大小未知,我建议您使用动态内存分配而不是二维数组。您可以按以下方式执行此操作。首先,声明一个指向指针的指针,它实际上是指向二维数组第一个元素的指针:

int **numbers;

然后,为二维结构分配内存:

int i;
numbers = malloc( N*sizeof(int *) );        // N is the number of the rows
if (numbers == NULL)
    return;
for (i = 0 ; i < N ; i++)
{
    numbers[i] = malloc( M*sizeof(int) );     // M is the number of the columns
    if (numbers[i] == NULL)
        return;
}

您可以阅读有关二维数组动态内存分配的更多信息 here , 以便了解内存中发生了什么。


最后,根据您的问题,请注意您不能申报:

int numbers[]; 

因为编译器需要一个指示来知道大小。

关于在 C 中创建未知大小的全局二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38132355/

相关文章:

c - 使用函数 getopt 得到除数的个数

c - 为什么我的可变参数在 C 中不起作用?

c - 数组的递归和

python - 计算Python中分配给某个值的变量数量

c - 指针和 getstring 函数

c - 尽管分配了指针,但指针仍指向 Null

c - C语言中的二进制数相加

c++ - 当通过命令行参数从配置文件中指定数组的大小时,如何使用std::array?

python - 为什么在函数中使用模块后重新导入会抛出异常?

ios - 最佳实践你只运行一次代码,并且只在你打开一个应用程序时运行。 swift 4,Xcode 8。