大小要运行时才知道?栈上定长不够,int a[n] 又非标准——需要动态内存。
int a[n](变量当大小)是非标准扩展(VLA),别依赖;new 动态申请铺路。| 写法 | 含义 | 问题 |
|---|---|---|
int a[100]; | 定长 | 大小写死,装不满/装不下 |
int a[n]; | 变量当大小(VLA) | 非标准扩展,别依赖 |
new int[n]; | 动态申请(见下节) | 按需分配 ✅ |
int a[n] 有些编译器(GCC)当扩展接受,但不是标准 C++,换编译器/判题环境就崩,竞赛不要用。int a[n],但换 Clang 或其它环境未必。竞赛/判题要写标准 C++,别赌它开扩展。int a[1000000] 局部声明(可能栈溢出),要用动态内存(下一节)或全局。酒店房间数写死在楼里(定长)——来的人少了浪费、多了住不下。你要是人数不确定,就得提前按最大备着,或按需“现开房”(动态分配)。
C++ 的“现开房”就是 new:运行时才知道要多大,按需向系统申请。这就是动态内存的意义——大小不提前写死,边跑边决定。
int n; cin>>n; int a[n];(n 是变量)为什么不推荐?new。n 分配数组,标准做法是?
int *a = new int[n];(动态申请,见下节)。栈上 int a[n] 是 VLA 扩展,不标准;定长 int a[100] 又无法匹配任意 n。