C++数组开辟问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 07:54:26
int n;
cin >> n ;
int arr[n];
我用dev_c++ 编译运行如上类似代码 好使,但是C++不是不允许这样开辟数组吗?vc里就报错 为什么数组必须用常量开辟?如果是变量有什么不好?

变量的值是运行的时候赋给的,而用这种方式开辟数组空间则是在编译时实行的,在编译时还不知道n等于多少,你叫编译器怎么办?

所以从语法层面上分析这样的用法是错误的。

但不同的编译器有不同的处理,有的编译器可能会支持这种用法。这种编译器在预编译的时候,遇到上述这种用法的时候,可能会直接将arr[n]转化成一个
*arr,并增加arr=new int[n];这样的语句,这样就从编译层面上支持了这种用法,可能dev_c++就是这样的情况。

变量的值是运行的时候赋给的,而用这种方式开辟数组空间则是在编译时实行的,在编译时还不知道n等于多少,你叫编译器怎么办?
如果想要在执行时开辟数组空间,可用new运算符,这样就可以使用n了

这个要提供一个常量才可以这样:
const int n=3;
int arr[n];

变量不是有什么不好,而是一个语法错误。
你在执行cin>>n;时,已经是运行时了。

因为在编译的时候编译器需要知道这个数值,这个叫做静态识别。
但是在C++中可以用指针来实现内存的的动态分配。叫做运行时识别。
例如
int n;
int *ptr;

cin>>n;
ptr=new int [n];

你这样的数组空间根本没法定义
可以用new