20
a的值是15,只有a=3*5这个对a的值有影响,其它的没有给a赋值
(a=3*5,a*4),a+5这个逗号表达式,
首先对于(a=3*5,a*4)和a+5来说,按照从左向右运算先计算(a=3*5,a*4)
(a=3*5,a*4)
这个逗号表达式从左向右运算先计算a=3*5,这是个赋值语句,处理a=3*5=15
再计算a*4,此时a=15,所以a*4=60,但是注意这个表达式并没有对a赋值,仅仅是一个乘法运算
根据逗号表达式的值取逗号中最右表达式的值的原则,(a=3*5,a*4)的值为60
再看a+5,
之前运算(a=3*5,a*4)时,a已经被赋值为15,所以这里a+5=15+5=20
所以a+5这个表达式的值为20
实际结果: 60
解析过程:
按优先级,先计算a=3*5,所以,a=15,然后计算a*4,值为60,实际上栈缓存的参数值就是60,然后第二个参数a+5=20,
实际就是 printf("%d\n",60,20);
printf处理的时候从左往右的,所有只会输出60。
#include <stdio.h>
int main(int argc,char **argv)
{
int a = 5;
printf("%d\n",((a=3*5),a*4),a+5);
}
编译会产生警告,但是能过。
执行结果
root@seven:~/workspace/test/params# ./a.out
60
a的值是15