三目运算符(a ?b :c)可以作为逻辑运算的载体
规则:当a的值为真时,返回b的值;否则返回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 ;
printf ("%d\n" , a );
printf ("%d\n" , b );
printf ("%d\n" , c );
return 0 ;
}
输出结果
ctest.c:11: error: lvalue required as left operand of assignment
错误原因:常量不能赋值运算符的左边。因为三目运算符返回的是一个数值,而不是变量。所以三目运算符不能作为左值使用。C++中解决了这个问题。
示例代码:三目运算符的返回类型
#include <stdio.h>
int main ()
{
char c = 0 ;
short s = 0 ;
int i = 0 ;
double d = 0 ;
char * p = "str" ;
printf ( "char = %d\n" ,sizeof (char ));
printf ( "short = %d\n" ,sizeof (short ));
printf ( "int = %d\n" ,sizeof (int ));
printf ( "double = %d\n" ,sizeof (double ));
printf ( "%d\n" , sizeof (c ? c : s ) );
printf ( "%d\n" , sizeof (i ? i : d ) );
printf ( "%d\n" , sizeof (d ? d : p ) ); //Error
return 0 ;
}
输出结果:
printf( “%d\n”, sizeof(d ? d : p) );发生错误: error: type mismatch in conditional expression
吧错误代码注释后,重新编译运行得到:
char = 1
short = 2
int = 4
double = 8
4
8
错误原因:数据类型不匹配。因为普通数据类型无法隐式转换为指针类型。所以当发生不能隐式转换到同一类型时,编译将发生错误。
1. char 和 short类型在三目运算符中隐式转换为int类型
2. 当int和double类型在三目运算符中时,隐式转换为较高类型