qq_43412960 2019-10-21 21:00 采纳率: 78.6%
浏览 482
已采纳

这是一个关于C语言的三目运算符问题

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()

{    int num1=1;
char  ha[6]=num>0?"dj":"nanguo";
printf("%s",ha);

system("pause");


return 0;
}

这是我写的一个三目运算符的测试小程序,我很奇怪,为什么会报错。我想通过判断整数型num是否大于0,来把dj或者nanguo赋给长度为6的ha字符数组,我感觉逻辑是没有问题的,而且长度也是够用的

  • 写回答

4条回答 默认 最新

  • aaa2000 2019-10-21 21:32
    关注
    char  ha[6]=num>0?"dj":"nanguo";
    

    上面这一行有问题,先不说 num 未定义少打一个数字 1 这种低级错误,假设改正确为 num1 还是会出错的。原因在于 "dj" 或 "nanguo" 不能放在这里直接赋值给数组,也就是说,数组不能用 = 号赋值。

    但是为什么这样又可以呢?

    char ha[] = "nanguo";
    

    原因是在上面的语句中,"nanguo" 是编译期常量,初始化时,编译期常量允许直接初始化(这里的等号不是赋值,是初始化!!)。

    测试三目运算建议使用 int 类型的变量。

    int ha = num1 > 0 ? 10 : 15;
    

    学习 C 语言一定要把变量声明、定义、初始化三个概念分开来理解。同时,等号除了初始化时可以使用,赋值也用等号,这里也要区别开来理解。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵