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条)

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R