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


    三目运算符

    三目运算符(a?b:c)可以作为逻辑运算的载体
    规则:当a的值为真时,返回b的值;否则返回c的值

    下面的程序运行结束后,a,b,c的值分别是多少?

    int a = 1;
    int b = 2;
    int c = 0;
    c = a < b ? a : b;
    (a < b ? a : b) = 3;
    

    例子1:关于三目运算符

    #include<stdio.h>
    
    int main()
    {
        int a = 1;
        int b = 2;
        int c = 0;
    
        c = (a > b ? a : b);
       // (a > b ? a : b) = 3; //error
    
        printf("a = %d,b = %d,c = %d
    ",a,b,c);
        return 0;
    }
    
    

    将上面代码修改为:

    #include<stdio.h>
    
    int main()
    {
        int a = 1;
        int b = 2;
        int c = 0;
    
        c = (a > b ? a : b);
       // (a > b ? a : b) = 3; //error
        *(a > b ? &a : &b) = 3;
        printf("a = %d,b = %d,c = %d
    ",a,b,c);
        return 0;
    }
    
    

    三目运算符(a?b:c)的返回类型

    • 通过隐式类型转换规则返回b和c中的较高类型
    • 当b和c不能隐式转换到同—类型时将编译出错

    例子2:三目运算符的返回值类型

    #include<stdio.h>
    
    int main()
    {
        char c = 0;
        short s = 0;
        int i = 0;
        double d = 0;
        char* p = "test";
    
        printf("%d
    ",sizeof(c?c:s)); // 4
        printf("%d
    ",sizeof(i?i:d)); // 8
       // printf("%d
    ",sizeof(d?d:p));
        return 0;
    }
    
    

    逗号表达式

    • 逗号表达式是C语言中的“粘贴剂”
    • 逗号表达式用于将多个子表达式连接为—个表达式
    • 逗号表达式的值为最后—个子表达式的值
    • 逗号表达式中的前N-1个子表达式可以没有返回值
    • 逗号表达式按照从左向右的顺序计算每个子表达式的值
      exp1, exp2, exp3, …, expN

    例子3:逗号表达式的应用,一行代码实现strlen()

    #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
    ", strlen("Nyist"));  
        printf("len = %d
    ", strlen(NULL));  
          
        return 0;  
    }  
    

    小结

    • 三目运算符返回变量的值,而不是变量本身
    • 三目运算符通过隐式类型转换规则确认返回值类型
    • 逗号表达式按照从左向右的顺序计算每个子表达式的值
    • 逗号表达式的值为最后一个子表达式的值
  • 相关阅读:
    unitTest单元测试框架
    Day06_页面发布与课程管理
    Day05_RabbitMQ研究
    Day04_页面静态化
    Day04_freemarker
    Day03_CMS页面管理开发
    Java概述练习题
    01_语言概述
    00_编程入门
    德道经
  • 原文地址:https://www.cnblogs.com/yanyun888/p/9152029.html
Copyright © 2020-2023  润新知