引言
今天我同学写了一个很奇怪的代码,而且居然正常运行
#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;
int arr[n];
for(int i=0;i<n;i++){
cin>>arr[i];
}
for(int i=0;i<n;i++){
cout<<arr[i]<<" ";
}
return 0;
}
当时十分纳闷,数组的长度不是必须是常量吗,难道我学了假的C++。
于是上网查新版本的特性,都没有这一点,最后才发现C/C++是支持VLA。
VLA
VLA就是variable-length array,也就是变长数组。
- C90标准中并不支持VLA,C99开始支持VLA
- VLA必须是自动存储类型
- 变长数组分配在栈中
- 有些编译器不支持
建议
不推荐使用VLA,因为毕竟有些编译器不支持,刷Leetcode用用就行,在项目里建议使用Vector等容器。