我尝试寻找解决此问题的方法,但没有成功。 我有一个用 C 编写的程序,其中有一个定义如下的数组:
int sevensArray[SEVENS_COUNT];
编译时出现错误,提示“表达式必须具有常量值
”。
我意识到你不能将数组大小作为变量,因为编译器应该知道它需要分配多少内存。
事情是... SEVENS_COUNT
在程序中被定义为 const INT
,如下所示:
const int SEVENS_COUNT = counter;
我的问题是为什么这仍然被视为错误。是不是因为即使 SEVENS_COUNT
是一个 const
它也被分配给 counter,这实际上是一个变量,我该如何解决这个问题。
我尝试了相同的代码,它在其他编译器(例如 Code::Blocks)上编译得非常好。
最佳答案
const
并不意味着常量,而是只读。
1) 最好的方法:使其动态而不是静态。使用malloc
,或者如果您希望另外初始化calloc
。最后不要忘记释放分配的内存。
但是,您需要一个指针而不是数组,但对于您的目的来说,它们本质上是相同的。喜欢:
int *sevensPtr = malloc(sizeof(int) * counter);
//your code
free(sevensPtr);
如果你不知道如何从分配的内存中访问元素,它类似于数组:
sevensArray[0] == sevensPtr[0] == *(sevensPtr + 0)
2) 另一种方法是使用 VLA。然后你可以为你的数组分配一个可变长度。如:
void foo(int n) //and pass counter
{
int x[n];
process(x, n);
}
换句话说,将其作为函数的参数传递,然后在本地声明数组。
您也可以简单地使用alloca
。
对于IDE,一个支持可变大小声明,而另一个不支持。但这取决于所使用的 C 标准,而不是环境本身。
关于Visual Studio 中的 C 程序。具有常量值的数组被视为错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34597428/