C语言 逗号表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 逗号表达式相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
main()

int a=1;
char c=’a’;
float f=2.0;
printf(“<1>:%f\n”,(a+2,c+2));


详细解释一下 谢谢

楼主不用晕,上面的说的都对。。。你老师说的也对。。
如果那个表达式这样写:y=(x=(a+b),(b+c)) 则y
=
10,如果是:y=(x=a+b),(b+c)那么y
=
6,原因就是逗号是C语言运算符中优先级最低的了,优先级为15,而“=”(赋值运算符)的优先级是14,比逗号高。而逗号表达式到底是怎么回事呢,看这个表达是,b
=
(a,c,d,e),这里面比如acde这四个变量都进行了初始化,那么这个表达式的计算过程就是从a开始,一直到e,只看最后一个逗号后的变量的值,该值就是此表达式的值,所以这个表达式b应该等于e,,,这你也就不难理解你说的那两个表达式为什么结果不一样了。。y=(x=a+b),(b+c)这个表达式因为没有外层括号,而逗号的优先级又比等号的低,所以在进行完x=a+b后就直接给y赋值了,然后才进行b+c的运算,我这样说楼主可明白?
参考技术A (a+2,c+2)这个为逗号表达式
逗号表达式从左向右执行,最后一个执行的结果作为逗号表达式的返回值
即c+2的结果为逗号表达式的返回值,所以最后输出的是c+2的值本回答被提问者采纳
参考技术B 逗号运算符是依次以从左到右的结合顺序进行运算,然后取最右边算式的值作为返回值。因此这个表达式的计算流程是:由于有括号运算符所以先对其进行运算,逗号运算符从左到右先计算k=3*2,此时k=6;然后计算k+4,此时k=10,返回;这里又有一个逗号运算符,由于左边算式已经计算完毕因此继续计算右边k+2,并作为(k=3*2,k+4),k+2这个表达式的返回值,值为12。同样,由于最后对k进行+2运算因此k的最终值也为12 参考技术C 逗号表达式运算机制:从左往右分元子计算,以最后一个元子的值作为整个表达式的值。
如y=(x=a+b),(b+c)中的逗号表达式(x=a+b),(b+c)有2个元子,分别为1:(x=a+b)和2:(b+c)。
先计算1得到(x=6),元子1的值为6,此时X值为6;
再计算2得到10,元子2的值为10;
将元子2的值传给y,传到y=10.
y=(x=a+b),(b+c);改为y=((x=a+b),(b+c));
两种表述意义一致,因为逗号表达式本身是一个完整的表达式串,加再多层括号也一样。这句话等价于
x=a+b;
y=b+c;
参考技术D C语言提供一种特殊的运算符——逗号运算符。用它将两个表达式连接起来。如:
  3+5,6+8
称为逗号表达式,又称为“顺序求值运算符”。逗号表达式的一般形式为
        
表达式1,表达式2
逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。例如,上面的逗号表达式“3+5,6+8”的值为14。
所以y=(x=a+b),(b+c)
y值为6
,y=((x=a+b),(b+c))
y值为10

c语言函数式宏逗号表达式

c语言函数式宏、逗号表达式

一般由逗号运算符连接的两个表达式“a, b”在语法上可以视为一个表达式,在表达式后面添加分号,就构成了表达式语句。

#include <stdio.h>

#define puts_alert(str) (putchar(\'\\a\'), puts(str))

int main(void)
{
    int n;
    printf("n = "); scanf("%d", &n);
    
    if(n)
        puts_alert("not 0");
    else
        puts_alert("is 0");
        
    return 0;
}

 

以上是关于C语言 逗号表达式的主要内容,如果未能解决你的问题,请参考以下文章

C语言逗号表达式问题?

C语言逗号表达式

c语言 逗号表达式

C语言 逗号表达式

C语言中逗号表达式的实用意义或者产生的原因?

c语言 求解逗号表达式的值