Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
visualstudio中的C程序。具有常量值的数组被视为错误_C_Arrays_Dynamic_Compiler Errors_Constants - Fatal编程技术网

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

visualstudio中的C程序。具有常量值的数组被视为错误,c,arrays,dynamic,compiler-errors,constants,C,Arrays,Dynamic,Compiler Errors,Constants,我试图寻找解决这个问题的办法,但没有成功。 我有一个用C编写的程序,其中有一个数组,定义如下: int sevensArray[SEVENS_COUNT]; 编译它时,我得到一个错误,它说“表达式必须是常量值”” 我意识到数组大小不能作为变量,因为编译器应该知道需要分配多少内存。 问题是SEVENS\u COUNT在程序中定义为const INT,如下所示: const int SEVENS_COUNT = counter; 我的问题是,为什么这仍然被视为一个错误。这是因为即使SEVENS\

我试图寻找解决这个问题的办法,但没有成功。 我有一个用C编写的程序,其中有一个数组,定义如下:

int sevensArray[SEVENS_COUNT];
编译它时,我得到一个错误,它说“
表达式必须是常量值”

我意识到数组大小不能作为变量,因为编译器应该知道需要分配多少内存。
问题是
SEVENS\u COUNT
在程序中定义为
const INT
,如下所示:

const int SEVENS_COUNT = counter;
我的问题是,为什么这仍然被视为一个错误。这是因为即使
SEVENS\u COUNT
是一个
const
它也被分配给了counter,而counter实际上是一个变量,我如何修正它


我尝试了相同的代码,它在其他编译器(如code::Blocks)上编译得非常好。

const
不是常量,而是只读的

1)最佳方法:使其成为动态的,而不是静态的。使用
malloc
,或者如果您希望对其进行额外初始化
calloc
。最后,不要忘记释放分配的内存

然而,您需要一个指针而不是数组,但出于您的目的,它们本质上是相同的。比如:

int *sevensPtr = malloc(sizeof(int) * counter);
//your code
free(sevensPtr);
如果您不知道如何从分配的内存中访问元素,则类似于数组:

sevensArray[0] == sevensPtr[0] == *(sevensPtr + 0)
2)另一种方法是使用VLAs。然后可以为数组指定一个可变长度。例如:

 void foo(int n)  //and pass counter
 {
   int x[n];
   process(x, n); 
 }
换句话说,将其作为函数的参数传递,然后在本地声明数组

您也可以简单地使用
alloca


关于IDE,一个支持变量大小声明,而另一个不支持。但这取决于使用的C标准,而不是环境本身。

只有自动VLA有效;在文件范围内,不能使用VLA。但是另一个IDE可以使用C++,它没有VLAS,但是它允许一个常量表达式被用作数组绑定。是的,你是对的,它必须在函数中本地生存和死亡。是的,我想到了(C++)。