三目运算符a ?b:c a 为真,返回b,为假返回c,有点像if else 语句。同时 三目运算符可以嵌套比如
a ?b:c?d:e;
另外在c语言中这表达式返回的是一个右值,所以不能放在=左边。
如:a ?b:c = 3;//错误。
而在c++中则是当b和c为左值或能转换为同类左值时,运算结果就为左值。否则就为右值。
a ?b:c = 3 //b和c都为左值时是正确的,不是则是错误的。
在C语言中我们可以通过取址符来改变变量值。
int a=1,b=2,c=3;
*(a < b?&b:&c) = 3;//b = 3;
三目运算符的返回类型
1。通过隐式类型转换得到较高的类型。
2.类型不能转换时,则报错。
char c = 0;
short s = 0;
int i = 0;
double d = 0;
char* p = "str";
printf( "%d\n", sizeof(c ? c : s) );//整型提升 4
printf( "%d\n", sizeof(i ? i : d) );//8
printf( "%d\n", sizeof(d ? d : p) );//错误,无法转换。
逗号表达式
逗号表达式是C语言的粘贴剂。
它吧多个表达式连接为一个表达式,
它的值为最后一个表达式的值。前N个表达式可以没有返回值。
它是按照从左到右依次计算每个表达式的值。
学习交流群199546072