1
#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

有人可以帮助我吗?

4

3 回答 3

5

您不能定义具有可变大小的静态存储数组(例如“全局”数组)。如果数组具有自动存储功能(如果它是函数中的数组),它将作为 VLA 工作。

正如 icepack 正确指出的那样,VLA 是在 C99 中正式引入的。

于 2013-03-27T09:50:08.427 回答
2
int arr[size];

这定义了一个具有恒定大小的数组。但是size是通过调用计算出来的sqrt,所以根据 C 程序的执行方式,它不是一个常数。

编译器需要知道数组有多大才能创建程序的全局内存布局。所以sqrt不能推迟到运行时。并且 C 没有任何可以在编译时解析的“数学”函数的概念。

解决这个问题的唯一方法是自己执行计算并将结果 ( 2) 直接放入源代码中。

于 2013-03-27T09:49:56.313 回答
-1
const int size=(int) sqrt(4);

一个预先计算好的常数就可以了。但是,您既不能更改数组大小,也不能更改此常数。

于 2013-03-27T09:52:35.583 回答