关键词:三目运算符、 三目运算符(a?b:c)
的返回类型、逗号表达式、一行代码实现strlen
1. 三目运算符
- 三目运算符
(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);
printf("c = %d\n", c);
// (a < b ? a : b) = 3; // error: lvalue required as left operand of assignment
return 0;
}
总结: 在C语言中,三目运算符返回的是一个值,而不是一个变量,因此不能作为左值使用。
2. 三目运算符(a?b:c)
的返回类型
原则:
- 通过隐式类型转换规则返回b和c中的较高类型
- 当b和c不能隐式转换到同一类型时将编译出错
3. 逗号表达式
- 逗号表达式是C语言中的粘贴剂
- 逗号表达式用于将多个子表达式连接为一个表达式
- 逗号表达式的值为最后一个子表达式的值
- 逗号表达式的前N-1个子表达式可以没有返回值
- 逗号表达式按照从左向右的顺序计算每个子表达式的值
4. 一行代码实现strlen
#include <stdio.h>
#include <assert.h>
int strlen(const char* s)
{
return assert(s), ( *s ? strlen(s + 1) + 1 : 0);
}
int main()
{
printf("%d\n", strlen("jacob2359"));
printf("%d\n", strlen(NULL));
return 0;
}
输出结果:
9
a.out: 2.c:6: strlen: Assertion `s' failed.
已放弃
5. 小结
- 三目运算符返回变量的值,而不是变量本身
- 三目运算符通过隐式类型转换规则确认返回值类型
- 逗号表达式按照从左向右的顺序计算每个子表达式的值
- 逗号表达式的值为最后一个表达式的值
声明:此文章为本人在学习狄泰软件学院《C语言深度解析》所做的笔记,文章中包含狄泰软件资料内容一切版权归狄泰软件所有!