代码如下:
int m=25;
int s[m] ;
同样的代码在Dev c++可以运行,可是到了vs就报错,报错内容是赢输入常量表达式。
请问这个怎么解决?
VS里面 C语言数组初始化报错怎么解决
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- 爱看书的小沐 2022-08-14 23:40关注
问题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];
- 目前经常使用的C语言有三个版本,分别是 C89(C90)、C99 和 C11。C89(也称 ANSI C)是较早的版本,也是最经典的版本,国内大学几乎都是以该版本为基础进行授课。C99 和 C11 是后来对 C89 的升级,增添了一些新内容(不多),语法更加灵活了,同时兼容 C89。
- 开源组织的 GCC 和 Xcode 使用的 LLVM/Clang 已经支持了大部分(几乎全部)的 C99 标准(GCC与Dev-Cpp都是支持C99的,Dev-Cpp底层是用MinGW为编译平台,MinGW则是Linux,Unix下的编译器gcc的Win32移植版。),而微软的 VC、VS 对 C99 却不感兴趣,直到后来的 VS2013、VS2015、VS2017 才慢慢支持,而且支持得还不好。
- 因为 C89和 C99 对数组做出了不同的规定:
在 C89中,必须使用常量表达式指明数组长度;也就是说,数组长度中不能包含变量,不管该变量有没有初始化。
而在 C99 中,可以使用变量指明数组长度。
问题2:函数传值产生“非常量引用的初始值必须是左值”?
解释:出现这种情况是因为调用函数的形参类型是 T&(T为某一类型),该类型与调用参数值传入不一致,比如函数中形参是int型,而传入实参是double,存在隐式类型转化,系统会自动产生临时变量temp将常量进行了修改。
方法:有两种方法可以解决以上问题,一是避免隐式转换;二是避免修改形参。亲,如果问题回答满意,请点下采纳,谢谢!
解决 1无用
悬赏问题
- ¥15 高德地图点聚合中Marker的位置无法实时更新
- ¥15 DIFY API Endpoint 问题。
- ¥20 sub地址DHCP问题
- ¥15 delta降尺度计算的一些细节,有偿
- ¥15 Arduino红外遥控代码有问题
- ¥15 数值计算离散正交多项式
- ¥30 数值计算均差系数编程
- ¥15 redis-full-check比较 两个集群的数据出错
- ¥15 Matlab编程问题
- ¥15 训练的多模态特征融合模型准确度很低怎么办