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 saber软件导入Ibis模型报错
  • ¥15 商城生产日期批次库存问题
  • ¥15 esp8266控制共阳极wrgb灯板无法关闭所有led灯
  • ¥100 python读取速度问题
  • ¥15 stm32f407使用DMA问题
  • ¥15 您好 这个API接口该怎么弄 网站搭建好了 API也有 现在就不知道该怎么填写API 不知道怎么用
  • ¥88 用uniapp写一个多端的程序,用到高德地图,用高德的JSAPI吗?
  • ¥20 关于#c++#的问题:水果店管理系统
  • ¥30 dbLinq最新版linq sqlite
  • ¥20 对D盘进行分盘之前没有将visual studio2022卸载掉,现在该如何下载回来