C语言中三目运算符(a?b:c
)可以作为逻辑运算的载体,规则
- 当a的值为真时,返回b的值
- 当a的值为假时,返回c的值
示例:三目运算符初探
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
int c = 0;
c = a < b ? a : b;
// (a < b ? a : b) = 3; //编译出错,三目运算符返回的是一个值,可修改为*( a < b ? &a : &b) = 3;
printf("%d\n", a);
printf("%d\n", b);
printf("%d\n", c);
return 0;
}
第11行编译出错:
原因是:三目运算符返回的是一个值,并不是一个变量。
注释掉11行,输出结果:
三目运算符返回类型
三目运算符(a?b:c
)的返回类型
- 通过隐式类型转换返回b和c的较高类型
- 当b和c不能隐式转换到同一类型时,将编译出错
示例:三目运算符的返回类型
#include <stdio.h>
int main()
{
char c = 0;
short s = 0;
int i = 0;
double d = 0;
char* p = "str";
printf( "%d\n", sizeof(c ? c : s) ); //int
printf( "%d\n", sizeof(i ? i : d) ); //double
//printf( "%d\n", sizeof(d ? d : p) ); //编译报错,deepinout.com.c:13:34: error: type mismatch in conditional expression
return 0;
}
输出结果: