【C深入】18_三目运算符和逗号表达式

关键词:三目运算符、 三目运算符(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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

总结: 在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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

输出结果:

9
a.out: 2.c:6: strlen: Assertion `s' failed.
已放弃
  • 1
  • 2
  • 3

5. 小结

  • 三目运算符返回变量的值,而不是变量本身
  • 三目运算符通过隐式类型转换规则确认返回值类型
  • 逗号表达式按照从左向右的顺序计算每个子表达式的值
  • 逗号表达式的值为最后一个表达式的值

猜你喜欢

转载自blog.csdn.net/zjy900507/article/details/80908148