我正在尝试用 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-1
和 0 <= 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/