精华内容
下载资源
问答
  • c语言逗号表达式的运算规则 c语言逗号表达式是由左向右进行的:k=3*2=6,K+2=8,表达式返回8。 逗号表达式用法: 当顺序点用,结合顺序是从左至右,用来顺序求值,完毕之后整个表达式的值是最后一个表达式的值。 ...
  • C语言——逗号表达式

    2021-01-11 21:30:45
    C语言——逗号表达式 一、什么是逗号表达式 ...下面通过一个典型程序来真切的了解一下逗号表达式的使用规则 二、基本使用 代码如下(示例): /* Note:Your choice is C IDE */ #include "stdio.h" void main() { int

    C语言——逗号表达式


    一、什么是逗号表达式

        简单来说就是,逗号表达式是C语言提供一种特殊的运算符——逗号运算符。它的优先级别最低,它将两个及其以上的式子联接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。

    下面通过一个典型程序来真切的了解一下逗号表达式的使用规则

    二、基本使用

    代码如下(示例):

    /* Note:Your choice is C IDE */
    #include "stdio.h"
    void main()
    {
        int a=0,b=0,x=0,y=0;
        //逗号表达式,结合顺序是从左至右,用来顺序求值,
        //完毕之后整个表达式的值是最后一个表达式的值
        
        a=(x=7,y=x%5,y+8);//7%5=2,此时y=2了,所以2+8=10  那么a=10
        (b=x=8,x%5),b%5,x%5;
        printf("%d,%d,%d,%d\n",a,b,x,y);//10,8,8,2
    }
    
    展开全文
  • 逗号表达式

    2019-12-27 14:19:54
    逗号表达式C语言中的“粘贴剂”。 逗号表达式规则逗号表达式用于将多个子表达式连接为一个表达式。 逗号表达式的值为最后一个子表达式的值。 逗号表达式的前N-1个子表达式可以没有返回值。 逗号表达式按照从...

    1 逗号表达式

    1.1 逗号表达式的规则

    逗号表达式是C语言中的“粘贴剂”

    逗号表达式的规则:

    • 逗号表达式用于将多个子表达式连接为一个表达式。
    • 逗号表达式的值为最后一个子表达式的值。
    • 逗号表达式的前N-1个子表达式可以没有返回值。
    • 逗号表达式按照从左向右的顺序计算每个子表达式的值。
    #include <stdio.h>
    
    void hello()
    {
        printf("Hello!\n");
    }
    
    int main()
    {   
        int a[3][3] = {
            (0, 1, 2),
            (3, 4, 5),
            (6, 7, 8)
        };//int a[3][3] = {2, 5, 8};此处为不当的逗号表达式
    
        int i = 0;
        int j = 0;
    
        while( i < 5 )
            printf("i = %d\n", i),
    
        hello(),
    
        i++;
    
        for(i=0; i<3; i++)
        {
            for(j=0; j<3; j++)
            {
                printf("a[%d][%d] = %d\n", i, j, a[i][j]);
            }
        }
    
        return 0;
    }
    
    

    1.2 逗号表达式的应用

    一行代码实现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\n", strlen("Lemon"));
        printf("len = %d\n", strlen(NULL));
        
        return 0;
    }
    
    

    参考资料:

    1. C语言进阶剖析教程
    展开全文
  • C语言中三目运算符和逗号表达式

    千次阅读 2018-04-21 12:08:59
     前几章节分析了逻辑运算符、位运算符和 ++ --运算符,那么这个章节,我们来分析下三目运算符和逗号表达式。  C语言中的三目运算符表达式格式为:a ? b : c ,其规则为:  -当a的值为真时,返回b的值,否则返回...

    --事物的难度远远低于对事物的恐惧!   

        前几章节分析了逻辑运算符、位运算符和 ++ --运算符,那么这个章节,我们来分析下三目运算符和逗号表达式。

        C语言中的三目运算符表达式格式为: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;
        
        //(a < b ? a : b) = 3;    //这句是否成立?在C语言中,三目运算符返回的是变量的值,故不能作为左值使用。
                                  //而在C++中,则可以返回对应的变量
        printf("%d\n", a);
        printf("%d\n", b);
        printf("%d\n", c);
        
        return 0;
    }

    输出结果为:  

    我们重点来谈谈三目运算符的返回值类型(a ? b : c):

        -在三目运算符中,通过隐式类型转换规则返回b和c中的较高类型

        -当b和c不能进行隐式转换到同一类型时将编译出错

    说完了规则,那么我们来看看下边的示例:

    #include <stdio.h>
    
    int main()
    {   
        char c = 0;
        int i = 0;
        double d = 0;
        char* p = "str";
    
        printf( "%d\n", sizeof(c ? c : i) );	//返回类型为i跟c中较高的类型
        printf( "%d\n", sizeof(i ? i : d) );	//返回类型为i跟d中较高的类型
        //printf( "%d\n", sizeof(d ? d : p) );	//error p与d不能隐式转换,编译出错
    
        return 0;
    }

    输出结果为:

     

    分析完了三目预算符,现在我们来分析下逗号表达式

    exp1, exp2, expp3, ... , expN-1, expN;

        -逗号表达式是C语言中的"粘贴剂"

        -逗号表达式用于将多个字表达式连接为一个表达式

        -逗号表达式的值为最后一个子表达式的值

        -逗号表达式的前 N-1 个子表达式可以没有返回值

        -逗号表达式按照从左向右的顺序计算每个子表达式的值

    来看看下边的代码,执行后会输出什么:

    #include <stdio.h>
    
    void hello()
    {
        printf("Hello!\n");
    }
    
    int main()
    {   
        int a[3][3] = {    //定义的数组,(0,1,2)其实等价于(2),所以数组等价于 int a[3][3] = {2, 5, 8};
            (0, 1, 2),
            (3, 4, 5),
            (6, 7, 8)
        };
        
        int i = 0;
        int j = 0;
        
        while( i < 5 )        //下边的三条语句前两句结束符都是逗号,相当于一个逗号表达式,返回值为最后一个子表达式,而前两个表达式都会被执行到
            printf("i = %d\n", i),
            
        hello(),
        
        i++;
            
        for(i=0; i<3; i++)
        {
            for(j=0; j<3; j++)
            {
                printf("a[%d][%d] = %d\n", i, j, a[i][j]);
            }
        }
    
        return 0;
    }

    执行结果为:

     

    总结:

        1、三目运算符返回变量的值,而不是变量本身

        2、三目运算符通过隐式类型转换规则确认返回值类型

        3、逗号表达式按照从左向右的顺序计算每个字表达式的值

        4、逗号表达式的值为最后一个子表达式的值

     

    展开全文
  • 文章目录1 三目运算符1.1 三目运算符的返回类型的代码案例分析2 逗号表达式2.1 逗号表达式代码案例分析2.2 如何用一行代码实现 strlen函数3 总结 1 三目运算符 三目运算符(a?b:c)可以作为逻辑运算的载体 规则: ...

    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;
        
        //(a < b ? a : b) = 3;
        
        printf("%d\n", a);
        printf("%d\n", b);
        printf("%d\n", c);
        
        return 0;
    }
    
    • 运行结果为:

    1
    2
    1

    • 上面的代码中,第11行给注释掉了。这行代码写的有问题。

    • 因为三目运算符是返回变量的值,而不是变量本身,所以11行中,左操作符是返回的一个具体的值,对这个值再赋值,肯定是错误的。(虽然它返回的是一个具体的数字,但是这个数字也是有数据类型的,具体是什么类型,下面会讲。)

    (a?b:c),如果b与c的类型不一样,返回值应该是什么类型?

    • 通过隐式类型转换规则,返回较高类型
    • 当b和c不能隐式转换为同一类型时,编译将会出错

    比如在下图中的三个三目运算符中,第三个printf中的double类型和 *p 指针类型不能转换,将会编译期间报错。

    在这里插入图片描述

    1.1 三目运算符的返回类型的代码案例分析

    • 代码:18-2.c
    #include <stdio.h>
    
    int main()
    {   
        char c = 0;
        short s = 0;
        int i = 0;
        double d = 0;
        char* p = "str";
            
        printf( "%d\n", sizeof(c ? c : s) );
        printf( "%d\n", sizeof(i ? i : d) );
        printf( "%d\n", sizeof(d ? d : p) );
    
        return 0;
    }
    
    • 使用gcc 4.4.5 编译程序显示如下错误:

    在这里插入图片描述

    • 将第13行注释掉编译运行结果如下:

    在这里插入图片描述

    • 第一个为什么是4。实际上是因为第一个返回了int类型。具体类型转换的规则参考C语言中的类型转化

    2 逗号表达式

    在C语言中:

    • 逗号表达式是C预压的一种“粘结剂”
    • 逗号表达式用于将多个子表达式连接为一个表达式
    • 逗号表达式的值为最后一个子表达式的值
    • 逗号表达式的前N-1个子表达式可以没有返回值,最后一个子表达式有返回值即可
    • 逗号表达式按照从左向右的顺序计算每个表达式的值

    在这里插入图片描述

    2.1 逗号表达式代码案例分析

    • 代码 18-3.c
    #include <stdio.h>
    
    void hello(){
        printf("Hello!\n");
    }
    int main(){
        
        int a[3][3]={
            (0,1,2),
            (3,4,5),
            (6,7,8)
        };
        
        int i = 0;
        int j = 0;
        
        while(i < 5)
            printf("i = %d\n", i),
        
        hello(),
        
        i++;
        
        for(i=0;i<3;++i){
            for(j=0;j<3;++j){
                printf("a[%d][%d] = %d\n", i,j,a[i][j]);
            }
        }
        
        return 0;
    }
    
    • 上述代码编译运行结果为:

    在这里插入图片描述

    • 第一个while循环后的三个语句,都是逗号表达式的一员,所以while循环5次
    • 定义数组a的时候,由于是使用的圆括号,里面的定义也是三个逗号表达式。应该改成下面的定义:
    int a[3][3]={
            {0,1,2},
            {3,4,5},
            {6,7,8}
        };
    

    那么结果就是正确的。注意逗号表达式的使用。

    2.2 如何用一行代码实现 strlen函数

    • 代码 18-4.c
    #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\n", strlen("Delphi"));
    
        printf("len = %d\n", strlen(NULL));
        return 0;
    }
    
    • 编译运行结果如下:

    在这里插入图片描述

    • 是不是体会到了逗号表达式与三目运算符的妙用?

    3 总结

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

    千次阅读 2018-05-08 23:34:50
    一、三目运算符定义:(a ?b : c) 当a的值为真时,返回b的值;...b : c) 返回类型: 1、通过隐试类型转换规则返回b和c中的较高类型 2、当b和c不能隐试转换到同一类型时将编译出错 下面通过写一段代码测试下: ...
  • 规则 : 当 a 为真时,返回 b 的值; 否则返回 C 的值 下面的程序运行结束后,a,b,c的值分别会是多少呢? int a = 1; int b = 2; int c = 0; c = a &amp;amp;amp;amp;amp;amp;amp;amp;lt; b ? a : b; (a...
  • 第十八课 三目运算符和逗号表达式 三目运算符 三目运算符(a?b:c)可以作为逻辑运算的载体 规则:当a的值为真时,返回b的值;否则返回c的值 下面的程序运行结束后,a,b,c的值分别为多少? int a = 1; int b = 2; ...
  • 规则:当a的值为真时,返回b的值,否则返回c的值。观察下面代码:int main() { int a=1; int b=2; int c=0; c = (a&lt;b ? a:b); // (a&lt;b ? a:b) = 3; *(a&lt;b ? &amp;a : &amp....
  • 规则:当a的值为真时,返回b的值;否则返回c的值。 三目运算符不可以当作左值使用。三目运算符返回值为一个值,而不是变量本身。 小技巧: 这里可以用地址来解决,因为变量的地址就是一个值。 *(a < b ? &...
  • 知识来源主要是陈正冲老师的《C语言深度解剖》及Delphi Tang老师的《C语言剖析》,有兴趣的朋友可以看我置顶文章获取 三目运算符(a ? b : c)可以作为逻辑运算的载体 规则:当a 的值为真时,返回b的值 , 否则...
  • 规则:当 a 的值为真时,返回 b 的值,否则返回 c 的值 下面看一下例子,初识三目运算符? // 18-2.c #include<stdio.h> void hello(){ printf("Hello!\n"); } int main(){ int a[3][3] = { ...
  • 规则:当a的值为真时,返回变量b的值(而不是变量本身);否则返回c的值。(c++中返回变量本身) 三目运算符(a?b:c)的返回类型 通过隐式类型转换规则返回b或c中较高的类型 当b和c不能隐式转换到同一类型时将...
  • 规则:当a的值为真时,返回变量b的值(而不是变量本身);否则返回c的值。(c++中返回变量本身) 三目运算符(a?b:c)的返回类型 通过隐式类型转换规则返回b或c中较高的类型 当b和c不能隐式转换到同一类型时将编译...
  • 逗号表达式:从左向右依次执行,以最后一次为其值; 表达式值:` for(i = 0; k = 0; i++ ) 其中k=0使其表达式值为0; 字符串数组最后一位为’/0’,strlen不会计算’/0’; 写程序时应将最长循环放在最内层,...
  • 说明:控制语句在程序中起到对程序流程的控制作用。表达式表达式 定义:一种有值的语法结构。由运算符、常量及变量构成。C语言表达式基本遵循一般代数规则。 表达式类型 变量常量表达式:a;...逗号表达式:int
  • 括号内加逗号的表达式属于逗号表达式逗号表达式规则是从左往右依次执行语句,并返回最后一个语句的结果,如果计算到最后最后一个表达式的值为真,则整个逗号表达式为真,否则为假。 追问 能给举个...
  • c语言复习笔记(一)——操作符和表达式

    千次阅读 多人点赞 2021-04-25 07:30:56
    逗号表达式六. 整形提升七.自动类型转换 一.算术操作符 1. 基本的算术运算符 1.除了% 意外,其他的操作符都可以作用于整数或浮点数 / 只要有一个操作数为浮点数,那么进行的是浮点数运算。 如果进行除运算的两...
  • C程序设计精编教程 * C程序设计精编教程 第2章 数据类型运算符和表达式 教学内容 2.1 数据类型 2.2 常量与变量 2.3 运算符与表达式 1理解常量与变量的概念 2掌握标识符的命名规则 3掌握整型实型和字符型变量的定义与...
  • 右移操作符规则I、逻辑右移II、算术右移三、位操作符四、赋值操作符五、单目操作符六、关系操作符七、逻辑操作符八、条件操作符九、逗号表达式 一、算术操作符 + - * / % 注意事项: 1. 除了此符号 % 外,其他...
  • ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、逗号运算符 将多个表达式用逗号连接起来,就构成...运算的规则:逗号表达式会从左往右依次进行执行,逗号表达式的值是最后一个表达式的值
  • C语言操作符

    2018-12-01 15:57:00
     逗号表达式 数组下标引用 函数调用 结构体成员使用 大体上,C语言的操作符具体就这么些,俗话说的好,饭得一口一口吃,知识也得一点一点学习; 首先让我们来了解一下这些操作符的使用规则和注意事项(坑踩的多了...
  • C语言笔记(三)

    2019-06-19 16:36:21
    第十三节 三目运算符和逗号表达式 1、三目运算符计算后得到的是一个具体的值而不是变量本身; 2、三目运算符的返回类型:sizeof(a>b?a:b) i. 通过隐式类型转换规则返回a和b中较高的类型; ii.当a和b不能...
  • C语言中有中特殊的运算符,逗号预算符,多个表达式之间用逗号隔开,整个逗号运算符的值以最后一个逗号表达式为准,如: x+1, y+2, x*2 if(i=1,j=2,k>3) . 需要注意的是如果逗号运算符有括号还是先算括号内的逗号...
  • 变量赋初值 3.7 各类数值型数据间的混合运算 3.8 算术运算符和算术表达式 3.9 赋值运算符和赋值表达式 3.10 逗号运算符和逗号表达式 整型int基本类型字符型 char单精度实型 float实型浮点型双精度实型 double数组...
  • C 语言课程第一讲 主要内容1~3 章P84 一C 语言程序的结构...2C 运算符的种类运算优先级和结合性 3不同类型数据间的转换与运算 4C 表达式 赋值表达式算术表达式关系表达式逻辑表达式条件表 达式逗号表达式的求值规则 5基
  • C语言-顺序结构

    2020-04-02 22:26:44
    文章目录1.变量2.变量(标识符)命名规则3.数据类型4.定义变量5.变量初始化(变量赋初值)6.内存溢出错误--注意各种数据的取值范围7.数制转换8....逗号表达式20.putchar函数21.getchar函数22.pr...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 140
精华内容 56
关键字:

c语言逗号表达式规则

c语言 订阅