C语言-逗号运算符/表达式

本文深入探讨了逗号运算符的使用,解释了其作为级别最低的运算符如何影响表达式的求值顺序,并通过多个示例说明了逗号表达式的特性及在C语言中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

逗号运算符
    逗号运算符是所有运算符中级别最低的,遇到逗号运算符表示运算结束;
    int i=0;
    int j=(i++,i++,i++);
    printf("i=%d,j=%d\n", i,j);//i=3,j=2;i++遇;才算结束

    i=0;
    int k=(i++)+(i++)+(i++);
    printf("i=%d,k=%d\n", i,k);//i=3,k=0
    
    int a=10;
    int b;
    int num = (a = 19, b = 10, a + 1);
    printf("a=%d,b=%d,num=%d\n", a,b,num);//a=19,b=10,num=20    
    
逗号表达式
    这种类型的运算符成为逗号表达式,又称为“顺序求值运算符”。 
    int a=10;
    a = 3 * 5, a * 4;
    printf("%d\n", a);//15;把a = 3 * 5作为一个整体,是一个赋值语句;后面a * 4是另外一个语句;
    
    a=10;
    printf("%d\n", (a = 3 * 5, a * 4));//60;括号内是一个整体,它的值是最后一个表达式的值,先运行得出a=15,后运算15*4=60;

    a=10;
    printf("%d\n", a = 3 * 5, a * 4);//15;这里的逗号是作为参数的分隔作用,a=15,后面的a * 4没有打印;
    
    a=10;
    printf("%d,%d\n", a = 3 * 5, a * 4);//15,40;
    这个涉及到参数求值顺序的问题,有的编译器是从左到右求值,你的编译器是从右到左求值的;
    我的编译器是从右到左求值的,所以打印出上面的值。
    
    a=10;
    printf("%d,%d\n", a * 4, a = 3 * 5);//60,15;交换顺序后就能确认是从右到左求值的;

扩展

  1、

    int m=6;

    if(m++ > 6) 在if括号后语句结束,里面的m++会自加然后m值为7,括号内的m值还是为6。

  2、下面打印出什么?

    int a[3][2]={(0,1),(2,3),(4,5)};

    int *p=a[0];

    printf("%d",p[0]);

    打印出1,因为是逗号表达式,所以二维数组a的排列是:1,3,5,0,0,0; 所以打印出1。

    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值