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

这是一个关于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字符数组,我感觉逻辑是没有问题的,而且长度也是够用的

char  ha[6]=num>0?"dj":"nanguo";

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

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

char ha[] = "nanguo";

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

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

int ha = num1 > 0 ? 10 : 15;

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

偶然看到,解答一下,认真学C语言的样子是狠可爱的!!
C语言条条框框很多,数组初始化一定要在花括号里,

char str[]={"I am happy"};

也可以省略花括号:

char str[]="I am happy";

字符数组初始化的花括号可以省略
你写的三目运算符,性质已经改变 ,你代码中三目运算符返回的是char * 型的字符串
数组不能用等号赋值,不管是字符型还是整型,要想赋值,就要用for循环对每一个数组中的每一个元素单独赋值

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{    
    int num=1;
    char * ha=num>0?"dj":"nanguo";
    printf("%s",ha);
    return 0;
}

dj

你把char ha[6] 改成 char *ha 就可以了,这样才是字符串

char ha[6] 这是字符数组,赋值时不允许 "abc" 这样赋值

虽然定义初始化时是可以的,但是由于使用了三元运算符,所以第一次就相当于赋值了

#include<stdio.h>
#include<stdlib.h>

int main() {
    int num = 1;
    char *ha = num > 0 ? "dj" : "nanguo";
    printf("%s", ha);
    system("pause");
    return 0;
}