如何在C中创建预定义的变量数组

时间:2013-12-01 08:02:53

标签: c arrays initialization

我正在尝试根据用户输入的大小创建一个数组,但它似乎不适用于c编程。以下是我的代码:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int x, y;
    scanf("%d", &x);
    scanf("%d", &y);

    double arr[x][y];
}

编译器一直在Expression must have a constant value.行返回“错误:double ...错误,任何人都可以帮助指出错误吗?

5 个答案:

答案 0 :(得分:4)

您有两种选择:

  • 使用支持C99(或更高版本)和可变长度数组的合适C编译器(我个人会采用这种方法);

  • 或者如果不可能,或者生成的数组太大而无法放入块范围变量(例如,导致堆栈溢出),则可以使用malloc();但是,您将无法使用该方法创建真正的二维数组,只能使用指向指针的指针,这可能是您正在寻找的也可能不是。

答案 1 :(得分:2)

代码可以在C99模式下工作,或者当编译器支持VLA(可变长度数组)作为扩展时(例如,GCC支持VLA作为GNU extesnion)。

在C89中,你必须使用带有动态内存的指针进行模拟。

答案 2 :(得分:2)

较旧的C标准不支持没有编译时大小的数组:

int array[42];
char text[] = "Hello World";
int numbers = { 1, 2, 3, 4 };

(在后两个例子的情况下,大小来自数据)

您需要更新的编译器,如果您使用GCC则指定-std = c99,或者您需要自己为阵列分配内存。

答案 3 :(得分:1)

您正在使用C89(Visual Studio?虽然这会在arr next>或C ++编译器的声明上给您一个错误。 VLA(可变长度阵列)是C99功能。

答案 4 :(得分:0)

您需要在运行时分配内存。编译器不允许声明数组,因为它不知道数组的大小。您需要使用malloc()来分配内存