Visual Studio 中的 C 程序。具有常量值的数组被视为错误

标签 c arrays dynamic compiler-errors constants

我尝试寻找解决此问题的方法,但没有成功。 我有一个用 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/

相关文章:

c - 其他信任中结构动态数组的 Valgrind 错误

c - Mac 和 Linux 的 Authenticode 或其他代码签名

c - 在这种情况下是否可以将两个单独的值返回给一个函数?

c++ - 如何更改我的 C++ 代码以使其可在 C 中使用?

c++ - 为什么数据文件的第一行被跳过c++

asp.net - 动态创建的用户控件无法处理回发事件

tomcat - Nginx 将每个请求转发给 apache tomcat

javascript - 如何使用 Array.sort() 正确排序数字?

java - 一维java数组的问题

c - 在 C 中具有函数的 realloc 结构