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;
}

总结: 在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语言深度解析》所做的笔记,文章中包含狄泰软件资料内容一切版权归狄泰软件所有!

    原文作者:jacob2359
    原文地址: https://www.jianshu.com/p/034ac03ebaac
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞