我一直认为,在编译时必须知道c ++中数组的大小。但是,最近我遇到了这样的代码
#include <iostream>
int main(){
int n;
std::cout << "n: ";
std::cin >> n;
int array[n + 1];
for(int i = 0; i <= n; i++)
array[i] = i * i;
for(int i = 0; i <= n; i++) {
std::cout << array[i] << " ";
}
std::cout << std::endl;
return 0;
}
令我惊讶的是,它编译时没有错误,甚至可以正常工作。
cpp$ g++ c_scr.cpp -o c_scr
cpp$ ./c_scr
n: 7
0 1 4 9 16 25 36 49
这是怎么回事?我正在使用g ++ 7.4.0