m0_72506398 2022-08-14 23:13 采纳率: 0%
浏览 138

VS里面 C语言数组初始化报错怎么解决

代码如下:
int m=25;
int s[m] ;
同样的代码在Dev c++可以运行,可是到了vs就报错,报错内容是赢输入常量表达式。
请问这个怎么解决?

  • 写回答

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 中,可以使用变量指明数组长度。

    img

    问题2:函数传值产生“非常量引用的初始值必须是左值”?
    解释:出现这种情况是因为调用函数的形参类型是 T&(T为某一类型),该类型与调用参数值传入不一致,比如函数中形参是int型,而传入实参是double,存在隐式类型转化,系统会自动产生临时变量temp将常量进行了修改。
    方法:有两种方法可以解决以上问题,一是避免隐式转换;二是避免修改形参。

    亲,如果问题回答满意,请点下采纳,谢谢!
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 8月14日

悬赏问题

  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办