如此声明数组正确吗?int n=10,a[n];

int n=10,a[n];这样对吗?
如果正样呢?
const int n =10;
int a[n];

上面说第二种是正确的请注意。
两种都不可以。你光声明的话可能编译器不会报错,
但是,你赋值试试就知道了
例如:
const int n = 10;
int a[n] = {0};
不相信的可以自己试试。

测试环境Dev-C++(gcc)

有错误variable-sized object may not be initialized

意思是,变量大小的对象不能被初始化。

究其原因,请大家参考下面提供的const限定符的具体意义,

const只是限定该函数不可被修改。并不是真正意义上的常量。

宏定义不失为一种方法。不然就malloc、free或者new、delete。

解说完毕。

另:引用一篇文章里的:

关键字const有什么含意?

我只要一听到被面试者说:"const意味着常数",我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const 的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么. 如果你从没有读到那篇文章,只要能说出const意味着"只读"就可以了。尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。(如果你想知道更详细的答案,仔细读一下Saks的文章吧。)

建议看一下http://linux.chinaitlab.com/c/713810_2.html

**补充一下。我说的是C语言。不是C++。
C++的话第一种是错误的,第二种正确
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-01-30

g++支持使用变量n来动态声明数组,无论它是const类型还是int类型。

源代码

结果

显然使用n来定义数组是OK的,当然在标准C里面不行。具体也看编译器吧。

第2个回答  2008-08-28
第一种是错误的,第二种是正确的。
对于编译器来说,数组的大小必须在声明的时候就已经知道,而不能来自于程序运行的结果,所以不能用第一种方式来声明。
在VS2005,下面的代码可以正常输出:
const int n =10;
int a[n];
a[0]= 1;
cout<<a[0]<<endl;
第3个回答  2008-08-26
3楼匿名回答的,你的回答是错的,不要误导。还有尽量不要用宏,因为宏没有类型安全。

实际编译一下就知道了,第二种做法是正确的,原因如2楼所说,剩下的自己去想吧。
第4个回答  2013-07-16
在gcc下,第一种是正确的,赋值也可以的;第二种不行,与const没什么关系。