一个简单的C语言问题

我算出来是4,2,5
为什么啊
求详解一下子
求详解一下子
求详解一下子
求详解一下子

img

分析如下
1)c=(a+=a+2)
a+=a+2,就相当于,a=a+a+2,因为a前面已经赋值为1,所以a=1+1+2=4,同时赋值给c=4
2)(a=b),前面已经赋值为2,所以此时,a=b,a=2
3)(b+3),这里只是进行简单的相加,没有赋值给任何变量,所以b还是等于2,b=2
通过分析可知,a=2,b=2,c=4

img


#include<stdio.h>

void main(){
    
    int a = 1, b = 2, c = 3; //三个正常 赋值,没啥解释的
    
    // 首先你要明确的一点是 c = (a += a + 2) , (a = b , b + 3); 这一串,c 只和前面的括号中的结果有关系,这一句类似于 a = b , c; // 前后没有关系, 
    
    //  ∴ c = (a += a + 2) = (a += 1 + 2) = (a += 3) = (a + 3) = 4 【这一步后 a 变成4 了】 
    
    // 在C 语言中,(a = b , b + 3 ) 这才是一个真的逗号表达式,从左往右算,即 a = b = 2, b + 3 = 2 + 3,∴ (a = b , b + 3) = b + 3 = 5,并且这之后a = 2 了 【b 并没有变化,还是2】 【算出来一个5 ,这个5 和c 一点关系都没有,意思是(a = b , b + 3)  = 5】
    
    // 所以,a =2b =2c = 4 
    
    c = (a += a + 2) , (a = b , b + 3);
    
    printf("%d,%d,%d" , a , b , c);
}

img