为什么在c++中定义数组时数组的常量表达式不能包含变量?

我想根据输入的n值去对数组的大小作动态定义,但是这样是编译不过的?有什么办法解决啊?... 我想根据输入的n值去对数组的大小作动态定义,但是这样是编译不过的?有什么办法解决啊? 展开
 我来答
blueskyzh
2015-09-29 · TA获得超过1289个赞
知道小有建树答主
回答量:450
采纳率:100%
帮助的人:180万
展开全部
你是指常量表示数组大小,还是初始值?但不管是什么,都原理一样,以数组大小为例,在C++中,有些变量是在编译期间,编译器就给分配空间的,有的是运行时候才分配空间,对于编译期间就分配空间的变量,编译器一定要知道它是多少长度的,才能分配适合那个长度的空间,静态数组,临时变量,全局变量之类都是这样。你放变量在里面,当然编译期间都不知道这个数组的大小,当然不行了。这类变量一般是在栈上分配空间,只不过不同类型变量位于栈的不同段。

有些变量是在运行期间分配空间的,这样的变量里面可以有变量,因为变量的值在运行期间可以确定,系统就知道为它分配多少空间。但一般这类变量是在堆上分配空间。
匿名用户
2014-12-04
展开全部

数组的长度在编译器要求定下来。而变量的值直到运行时在知道。

可使用动态分配数组:

	int len = 0;
cin >> len;
int *arr = new int[len];

delete[] arr;//用完后别忘了delete
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yanglei5658
2014-12-04 · TA获得超过4756个赞
知道大有可为答主
回答量:835
采纳率:100%
帮助的人:511万
展开全部

使用new操作符,动态申请内存。不过用完后需要用delete删除。

例子:

int N ;
cin>>N;
int *arr = new arr[N];
for(int i = 0;i<N;i++)
{
    cin>>arr[i];
}
for(int i = 0;i<N;i++)
{
    cout<<arr[i]<<" ";
}
cout<<endl;
delete []arr;
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8ed5175
2014-12-04 · TA获得超过396个赞
知道答主
回答量:27
采纳率:100%
帮助的人:14.5万
展开全部
我一般就是,定义一个足够大的,但是不说楼主也知道。
还有就是链表的形式用的时候在加到数组中,不知道楼主学过数据结构与算法没有
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式