三目运算符
C语言中的三目运算符:“?:”,其格式为:
表达式1 ? 表达式2 : 表达式3;
执行过程是:
先判断表达式1的值是否为真,如果是真的话执行表达式2;如果是假的话执行表达式3。
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
int c = 0;
char c1 = 0;
short s = 0;
int i = 0;
double d = 0;
char* p = "str";
c = a < b ? a : b;
(a < b ? a : b) = 3;//编译错误,因为三目运算符返回的是变量值,而不是变量,所以不能作为左值
printf("%d\n", a); //1
printf("%d\n", b); //2
printf("%d\n", c); //因为a < b所以为真,返回a的值,赋给c = a,所以c = 1
printf( "%d\n", sizeof(c1 ? c1 : s) );//根据隐式类型转换,char和short会转换成int类型,所以是4
printf( "%d\n", sizeof(i ? i : d) ); //根据隐式类型转换,int和double会转换成double类型,所以是8
printf( "%d\n", sizeof(d ? d : p) ); //double和指针类型不能转换同一个类型,所以编译error
return 0;
逗号表达式
逗号表达式是按照从左向右的顺序计算每个子表达式,逗号表达式的值是最后一个子表达式的值。
通过定义我们可以知道逗号表达式实际是将多个子表达式组合到一起,形成一个表达式,同时子表达式可以没有返回值
#include <stdio.h>
void hello()
{
printf("Hello!\n");
}
int main()
{
int a[3][3] = {
(0, 1, 2),
(3, 4, 5),
(6, 7, 8)
}; //初始化一个二维数组
int i = 0;
int j = 0;
while( i < 5 ) //因为 i< 0 所以执行printf()函数,打印i的值,也就是0
printf("i = %d\n", i),//注意这里是一个逗号,不是分号
hello(), //输出”Hello!“ 注意这里也是一个逗号,不是分号
i++; //i递增 注意这里才是逗号,所以while里面包含三条语句
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
{
printf("a[%d][%d] = %d\n", i, j, a[i][j]);//输出二维数组
}
}
return 0;