#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
有人能帮助我吗?
答案 0 :(得分:5)
您无法使用可变大小的静态存储(例如“全局”数组)定义数组。如果数组具有自动存储(如果它是函数中的数组),它将作为VLA工作。
正如icepack正确指出的那样,在C99中正式引入了VLA。
答案 1 :(得分:2)
int arr[size];
这定义了一个具有常量大小的数组。但size
是通过调用sqrt
来计算的,因此根据C程序的执行方式,它不是常量。
编译器需要知道数组有多大才能创建程序的全局内存布局。所以sqrt
不能延迟到运行时。并且C没有任何可以在编译时解决的“数学”函数的概念。
唯一的方法是自己执行计算并将结果(2
)直接放入源代码中。
答案 2 :(得分:-1)
const int size=(int) sqrt(4);
预先计算的常数会这样做。但是,您不能更改数组大小和常量。