C ++静态数组,如动态数组[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++静态数组,如动态数组[重复]相关的知识,希望对你有一定的参考价值。

似乎记得C ++中的静态数组只能从const表达式初始化,但如果你写:

#include <iostream>

int main() {
  int n;
  std::cin >> n;
  int a[n];
  std::cout << sizeof(a);

  return 0;
}

该程序成功编译(gcc C ++ 17)并打印n * sizeof(int)。但为什么会这样呢?

答案

Variable-length arrays不是标准的一部分。它们可以作为编译器扩展存在,GCC就是这种情况。编译时,您可能会收到以下警告:

警告:ISO C ++禁止变长数组'a'[-Wvla]

当应用于数组时,sizeof运算符返回整个数组的大小,该大小是基础类型的大小乘以元素的数量。参考说明,强调我的:

每个VLA实例的大小在其生命周期内不会改变,但在通过相同代码的另一个传递上,它可以分配不同的大小。

GCC官方文件名为6.19 Arrays of Variable Length

这些数组的声明与任何其他自动数组一样,但其长度不是常量表达式。存储在声明点分配,并在包含声明的块作用域退出时释放。

据说更喜欢std::vectorstd::array到原始(C风格)数组。

以上是关于C ++静态数组,如动态数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C语言实现使用动态数组实现循环队列

ThinkPHP如何清空静态数组?

替换数组项,源值也在公共静态无效[重复]上被替换

C++中定义动态数组

C++中定义动态数组

一个动态数组的例子C++