代码如下:
int m=25;
int s[m] ;
同样的代码在Dev c++可以运行,可是到了vs就报错,报错内容是赢输入常量表达式。
请问这个怎么解决?
问题1:数组初始化报错?
解决方案有如下几种:
(1)添加const修饰,定义常变量
const int m = 25;
int s[m];
(2)将变量m改成宏定义
#define m 25
int s[m];
(3)将s改成动态数组
int m = 25;
int *s = new int[m];
在 C89中,必须使用常量表达式指明数组长度;也就是说,数组长度中不能包含变量,不管该变量有没有初始化。
而在 C99 中,可以使用变量指明数组长度。
问题2:函数传值产生“非常量引用的初始值必须是左值”?
解释:出现这种情况是因为调用函数的形参类型是 T&(T为某一类型),该类型与调用参数值传入不一致,比如函数中形参是int型,而传入实参是double,存在隐式类型转化,系统会自动产生临时变量temp将常量进行了修改。
方法:有两种方法可以解决以上问题,一是避免隐式转换;二是避免修改形参。
亲,如果问题回答满意,请点下采纳,谢谢!
因为dev默认支持c99,而vs默认不支持,这种定义方式属于变长数组(VLA),只有c99之后才支持变长数组
将m = 25宏定义好了
c语言本来就不支持这种声明方式。[]里必需是常量不能是变量。