#include <stdio.h>
#include <math.h>
int size = (int) sqrt(4);
int arr[size];
int main() {
return 0;
}
我得到了:
test.c:5: error: array bound is not an integer constant
有人可以帮助我吗?
#include <stdio.h>
#include <math.h>
int size = (int) sqrt(4);
int arr[size];
int main() {
return 0;
}
我得到了:
test.c:5: error: array bound is not an integer constant
有人可以帮助我吗?
您不能定义具有可变大小的静态存储数组(例如“全局”数组)。如果数组具有自动存储功能(如果它是函数中的数组),它将作为 VLA 工作。
正如 icepack 正确指出的那样,VLA 是在 C99 中正式引入的。
int arr[size];
这定义了一个具有恒定大小的数组。但是size
是通过调用计算出来的sqrt
,所以根据 C 程序的执行方式,它不是一个常数。
编译器需要知道数组有多大才能创建程序的全局内存布局。所以sqrt
不能推迟到运行时。并且 C 没有任何可以在编译时解析的“数学”函数的概念。
解决这个问题的唯一方法是自己执行计算并将结果 ( 2
) 直接放入源代码中。
const int size=(int) sqrt(4);
一个预先计算好的常数就可以了。但是,您既不能更改数组大小,也不能更改此常数。