为什么当我定义一个array of floats
like 时:
const int i[] = { 1, 2, 3, 4 };
float f[i[3]]; // Illegal
在任何功能之外(即在全局中),这样做是非法的。而如果我在任何函数(包括 main() )中做同样的事情,比如:
void f() {
const int i[] = { 1, 2, 3, 4 };
float f[i[3]];
cout << sizeof(f);
}
main()
{
f();
}
然后一切正常,它成功输出大小为 16。为什么会有这种差异?是因为存储位置从静态(最初)到堆栈的变化吗?
(PS:我知道在 C++ 中,不能使用在编译时其值未知的变量来定义数组,但仍然如此,那么它在函数中是如何工作的?)