请问C++的字符串string类为什么数组中不能为变量?

比如intn=5;stringa[n];这样为什么不可以?支持常变量,但不支持变量,什么原理?... 比如
int n=5;
string a[n];
这样为什么不可以?
支持常变量,但不支持变量,什么原理?
展开
 我来答
香蕉1996
2013-02-05 · TA获得超过132个赞
知道小有建树答主
回答量:120
采纳率:100%
帮助的人:83万
展开全部
因为数组在C++中是静态存在的,它占用一定的空间(也就是固定长度),在数组当前所在函数运行中是不能改变其长度的(函数结束就消失),一旦改变了长度,数组所在内存区就会出现空缺,导致出错!你在int n=5之前不添加const声明为常变量,系统将认为你“企图”在运行中修改数组长度,所以不予通过。
百度网友6234792
2013-02-05 · TA获得超过1267个赞
知道小有建树答主
回答量:385
采纳率:100%
帮助的人:320万
展开全部
1.好像新版本的编译器支持这个的……我记不得了。

2.因为常量相当于是固定的,编译的时候就可以得到这个值的,然后编译的时候就可以直接弄出数组长度什么的……就算是有值的变量,编译器它也是不知道的。

3.如果对于不支持这个的编译器要用这样的方式,可以用指针:
int n = 5;
string* p;
p = new string[n];
delete[] p;
要访问第一个元素就*p,第二个就*(p+1)以此类推。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
goodboy5201314
2013-02-05 · TA获得超过192个赞
知道答主
回答量:82
采纳率:0%
帮助的人:54.7万
展开全部
因为定义数组时,分配空间是需要一个固定的值,来确定你所申请的空间的大小。

int n = 5;在编译的时候并没有给n赋值,变量是在栈中存在的,不是固定的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yy_ever_ly
2013-02-05 · 超过21用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:36.9万
展开全部
你要申请一块内存,但是多大啊?系统该你多大呢?好比你买饭,你只告诉卖饭的师傅说你要吃饭,要买饭,你不说买什么,买多少,师傅怎么给你打饭啊??
别说你这了,就算初始化的时候你用变量都不行的。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xilovezle
2013-02-05
知道答主
回答量:1
采纳率:0%
帮助的人:1538
展开全部
string a[n];
前面的string 表示你的a[n];是什么样的数据,比如整型int,浮点float,字符char,
这是有限定的 教程上有写的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
veket的小号
2013-02-04 · TA获得超过3371个赞
知道大有可为答主
回答量:3762
采纳率:0%
帮助的人:3997万
展开全部
因为你的编译器太古董了..........
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式