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

比如
int n=5;
string a[n];
这样为什么不可以?
支持常变量,但不支持变量,什么原理?

因为数组在C++中是静态存在的,它占用一定的空间(也就是固定长度),在数组当前所在函数运行中是不能改变其长度的(函数结束就消失),一旦改变了长度,数组所在内存区就会出现空缺,导致出错!你在int n=5之前不添加const声明为常变量,系统将认为你“企图”在运行中修改数组长度,所以不予通过。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-05
1.好像新版本的编译器支持这个的……我记不得了。

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

3.如果对于不支持这个的编译器要用这样的方式,可以用指针:
int n = 5;
string* p;
p = new string[n];
delete[] p;
要访问第一个元素就*p,第二个就*(p+1)以此类推。
第2个回答  2013-02-05
因为定义数组时,分配空间是需要一个固定的值,来确定你所申请的空间的大小。

int n = 5;在编译的时候并没有给n赋值,变量是在栈中存在的,不是固定的值。
第3个回答  2013-02-05
你要申请一块内存,但是多大啊?系统该你多大呢?好比你买饭,你只告诉卖饭的师傅说你要吃饭,要买饭,你不说买什么,买多少,师傅怎么给你打饭啊??
别说你这了,就算初始化的时候你用变量都不行的。。
第4个回答  2013-02-05
string a[n];
前面的string 表示你的a[n];是什么样的数据,比如整型int,浮点float,字符char,
这是有限定的 教程上有写的
第5个回答  2013-02-04
因为你的编译器太古董了..........
相似回答