共计 1272 个字符,预计需要花费 4 分钟才能阅读完成。
·三目运算符(a?b:c)可以作为逻辑运算的载体
·规则:当 a 为真时,返回 b 的值;否则返回 c 的值
例子 18-1:
include”stdio.h”
int main()
{
int a = 1;
int b = 2;
int c = 0;
c =a<b? a:b;
printf("%d\n",a);
printf("%d\n",b);
printf("%d\n",c);
return 0;
}
输出结果:
1
2
1
·三目运算符(a?b:c)的返回类型
- 通过隐式类型转换规则返回 b 和 c 中的较高类型
- 当 b 和 c 不能隐式转换到同一类型时将编译出错
例子 18-2:
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)); //4
printf("%d\n",sizeof(i? i : d)); //8
//printf("%d\n",sizeof(d? d : p)); //error
}
输出结果:
4
8
//printf(“%dn”,sizeof(d? d : p)); //error
错误是因为普通的基本类型是不能隐式类型转化为指针类型的。
逗号表达式
·逗号表达式是 C 语言中的“粘贴剂”
·逗号表达式用于将多个子表达式连接为一个表达式
·逗号表达式的值为最后一个子表达式的值
·逗号表达式中的前 N - 1 个子表达式可以没有返回值
·逗号表达式按照从左向右的顺序计算每个子表达式的值
例子 18-3:
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)
printf("i = %d\n",i),
hello(),
i ++;
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;
}
输出结果:
i = 0
Hello!
i = 1
Hello!
i = 2
Hello!
i = 3
Hello!
i = 4
Hello!
a0 = 2
a0 = 5
a0 = 8
a1 = 0
a1 = 0
a1 = 0
a2 = 0
a2 = 0
a2 = 0
例子 18-4:
include “stdio.h”
include “assert.h”
int strlen(const char*s)
{
return assert(s),(*s ? strlen(s + 1) + 1 : 0);
}
int main()
{
printf("len = %d\n",strlen("zhangyingli"));
printf("len = %d\n",strlen(NULL));
return 0;
}
输出结果:
len = 11
Assertion failed: s, file 18-4.c, line 6
小结:
·三目运算符返回变量的值,而不是变量本身
·三目运算符通过隐式类型转换规则确认返回值类型
·逗号表达式按照从左向右的顺序计算每个子表达式的值
·逗号表达式的值为最后一个子表达式的值
狄泰软件学院课堂笔记