C语言传参为等式时候不懂了

问题相关代码,请勿粘贴截图
#include <stdio.h>
int fun(int a, int b) {
    printf("a = %d, b = %d\n", a, b);
    return a + b;
}
int main(int argc, const char *argv[])
{
    int b = 3, c = 0;
    c = fun(b += 3, ++b);
    printf("c = %d\n", c);
    return 0;
}
运行结果
a = 7, b = 7
c = 14
为什么运行结果是14 特别是a为什么等于7

函数参数入栈顺序是从右至左的,
fun(b += 3, ++b);是先执行 ++b。对b加1,之后返回b的地址。
之后是执行 b += 3。对b再加3 ,还是返回b的地址。
在fun()函数中从两个返回b的地址中读取数值就都是7

c = fun(b += 3, ++b);这里传参的时候,从右到左计算,++在b的前面,先计算++b,b的值变成4,然后计算b+=3,也就是b = b+3=4+3=7,所以最后传入函数的是c=fun(7,7)

首先执行
b += 3,执行之后b的值为6,
然后执行 ++b,b的值是7

在函数传参数的之后,会获取b的地址中的值,此时这个值是7