c++如何从键盘输入一个数作为一维数组的长度代码
c++如何从键盘输入一个数作为一维数组的长度代码 # include <iostream>using namespace std;
int main()
{
int n;
cin >> n;
int a;
} qiuyouzhi 发表于 2020-6-24 20:44
不得行 带我飞@小甲鱼 发表于 2020-6-24 20:48
不得行
?
那你想怎么做? F:\C++软件\MyProjects\practice.cpp(9) : error C2057: expected constant expression
F:\C++软件\MyProjects\\practice.cpp(9) : error C2466: cannot allocate an array of constant size 0
F:\C++软件\MyProjects\practice.cpp(9) : error C2133: 'a' : unknown size
执行 cl.exe 时出错.
运行显示有问题 qiuyouzhi 发表于 2020-6-24 20:44
???C++不支持VLA #include<iostream>
using namespace std;
int main() {
int n;
cin >> n;
int* arr = new int;
return 0;
} 永恒的蓝色梦想 发表于 2020-6-24 21:18
???C++不支持VLA
那我这里为啥没报错{:10_250:} qiuyouzhi 发表于 2020-6-25 07:08
那我这里为啥没报错
发个截图? 永恒的蓝色梦想 发表于 2020-6-25 08:04
发个截图?
qiuyouzhi 发表于 2020-6-25 08:23
啊这https://s1.ax1x.com/2020/06/25/N0e59O.jpg 永恒的蓝色梦想 发表于 2020-6-25 08:54
啊这
{:10_250:} 本帖最后由 jhanker 于 2020-6-26 12:17 编辑
编译器问题 我是这样认为的:按道理说a数组应该在编译阶段就确定使用的内存空间大小,所以编译就通不过了。在程序运行时,一般的编译器都是按下面这样处理变量的,在main函数运行时,在内存栈区已经把a数组的空间分配好,(用ebp寄存器存储当前函数栈空间变量区的基地址进行寻址)也就是说,还没有输入n时,就应该确定空间了,否则,代码就存在栈空间溢出的问题。
但如果用new运算符在堆区动态建立空间,例如上面的arr就可以,其实c++标准库里的vector就是用上面的方法实现动态数组功能的
我是建议如果要用动态数组最好用标准库里的容器。
我的见解还请大家讨论 qiuyouzhi 你的编译器挺厉害的,估计编译器是在堆区建立相应空间了。 qiuyouzhi 发表于 2020-6-25 08:23
你用的是什么编译器?在什么操作系统下的? jhanker 发表于 2020-6-26 16:09
你用的是什么编译器?在什么操作系统下的?
1,g++
2,Windows qiuyouzhi 发表于 2020-6-26 16:46
1,g++
2,Windows
你可以跟踪代码看看 a数组是不是把空间建在堆区了
页:
[1]