qq_43412960
2019-10-21 21:00
采纳率: 79.1%
浏览 469

这是一个关于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条)

相关推荐 更多相似问题