当我尝试这段代码时,它起作用了:
const int i = 5;
int main() {
int arry[i];
}
即使这不起作用:
const int i = 5;
int arry[i];
int main() {
}
我在这里阅读了所有关于大小不变的数组的帖子,但我不明白为什么在 main 中声明 arry
时它会起作用。
最佳答案
这里的问题是 C 中的 const
不会产生真正的常量。
当您编写 const int i = 5
时,您拥有的是一个只读变量,而不是常量。在 C99 中,以 i
为维度的数组是可变长度数组 (VLA)。 VLA 仅适用于堆栈分配的变量,因此您会看到编译错误。
如果您需要一个具有全局范围的数组,您应该切换到宏。
#define ARRAY_SIZE 5
int arry[ARRAY_SIZE];
这是有效的,因为 5
是一个真正常量的文字。
事实上,即使是自动存储数组(即堆栈分配的局部变量),您也应该避免使用 VLA,因为它们会产生运行时开销。
关于c - 具有恒定大小的数组(全局与堆栈),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7946415/