【C语言学习疑难杂症】第7期:函数参数的处理过程

先看下如下代码: 

int main()

{

int a = 1, b = 2, c = 3;

printf("%d %d %d %d",a=b=c,a=b==c,a==(b=c),a==(b==c));// 3 3 0 0

return 0;

}

对于这个代码的理解:

首先在C语言中,函数调用的时候,会把参数压栈,压栈的过程是从右往左处理,在此之前需要先计算需要压栈的具体的值:

a==(b==c)

b==c因为b和c的结果不同,所以这个表达式结果为假,即0。再判断a==0,a为1,所以两值不等,整个表达式结果为0

a==(b=c)

首先把c赋值给b,所以b此时结果为3。小括号表达式结果也为3,a==3为假,结果为0

a=b==c

  ==比较b和c,上次计算b已经为3了,c也为3,所以相等,表达式值为真,结果为1,1赋值给a,a为1,表达式结果为1

a=b=c

连续赋值,a的结果最后为3

在最后一次处理结束后,此时a变量里面的值,已经变成了3,因为最后两步都是打印a的值,所以最终结果是3 3 0 0

你可能感兴趣的:(C语言学习常见疑难杂症,c语言,c语言,C语言,谭浩强,函数,参数)