美文网首页C++数据结构和算法分享专题
18_三目运算符和逗号表达式

18_三目运算符和逗号表达式

作者: 编程半岛 | 来源:发表于2018-03-09 18:36 被阅读15次

关键词:三目运算符、 三目运算符(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语言深度解析》所做的笔记,文章中包含狄泰软件资料内容一切版权归狄泰软件所有!

相关文章

  • 18_三目运算符和逗号表达式

    关键词:三目运算符、 三目运算符(a?b:c) 的返回类型、逗号表达式、一行代码实现strlen 1. 三目运算符...

  • C语言005 第五节课-逗号运算符2019-06-28

    前言:逗号运算符,逗号运算符是单目运算符,其功能是把两个表达式组成一个表达式,分别求表达式的值,最后一个表达式的值...

  • js笔记之运算符

    一:运算符和表达式 1.三目运算符(三元运算符) 表达式1?:表达式2:表达式3; ...

  • 2018-05-25笔记

    一:运算符和表达式 1.三目运算符(三元运算符) 表达式1?:表达式2:表达式3...

  • 三目运算符,函数,声明提前

    一:运算符和表达式 1.三目运算符(三元运算符) += -= *= /= %= 表达式1?:表达式2:表达式3...

  • JavaScript③

    函数 一:运算符和表达式 1.三目运算符(三元运算符) 表达...

  • javascript第三章

    一:运算符和表达式 1.三目运算符(三元运算符) 表达式1?;表示式2: 表示式2 ...

  • C语言003 第三节课-学习运算符的优先级2019-06-26

    运算符的类型操作数的数目分单目运算、双目运算和三目运算; 按运算符的功能分类有算术运算符、赋值运算符、逗号运算符、...

  • Java 三目运算 if else 一行代码搞定

    java 三目运算符 Java中三目运算符的语法: 表达式1?表达式2:表达式3;运算顺序先计算‘表达式1’的值 ...

  • 逗号表达式

    1. 逗号表达式的一般形式 PS: 逗号运算符优先级最低 逗号运算符的结合性从左至右 逗号表达式的值等于最后一个表...

网友评论

    本文标题:18_三目运算符和逗号表达式

    本文链接:https://www.haomeiwen.com/subject/kkwrfftx.html