求编程大侠解答!一个C语言逗号表达式和括号的问题
展开全部
逗号很好办,逗号就是单纯分隔两个式子,括号的主要作用是将括号内的运算式子作为一个整体,也有优先运算的含义(这个含义和数学上是一样的)
对于你的这段程序,首先说b,原式是(b=4*5, b*2), b+6
首先计算b=4*5,此时b=20,然后算逗号后的式子就是b*2,注意这里没有说把结果赋值给b,所以b还是等于20,最后的b+6同理,只是计算了一个式子,并没有保存结果,所以b最后的输出为20;
再说a,输出的式子是一个括号,这是一个整体,式子里面首先计算a=3*5,所以a=15,然后计算a*4,同样没有被保存,a还是15,最后计算a+5,这个时候还是没有赋值,所以a=15。但是由于在同一个括号里有2个逗号分开了3个式子,所以括号这个整体的值由最后一个式子决定,最后一个式子的值是a+5,也就是15+5,所以括号这个整体的值是20,输入为20。
对于你的这段程序,首先说b,原式是(b=4*5, b*2), b+6
首先计算b=4*5,此时b=20,然后算逗号后的式子就是b*2,注意这里没有说把结果赋值给b,所以b还是等于20,最后的b+6同理,只是计算了一个式子,并没有保存结果,所以b最后的输出为20;
再说a,输出的式子是一个括号,这是一个整体,式子里面首先计算a=3*5,所以a=15,然后计算a*4,同样没有被保存,a还是15,最后计算a+5,这个时候还是没有赋值,所以a=15。但是由于在同一个括号里有2个逗号分开了3个式子,所以括号这个整体的值由最后一个式子决定,最后一个式子的值是a+5,也就是15+5,所以括号这个整体的值是20,输入为20。
追问
大侠,同样是逗号表达式,为什么b*2不赋值,而a+5赋值了呢?
展开全部
逗号的优先级最低,而括号最高。在计算逗号表达式时,运算方向从左到右。整个表达式的值等于最后一个逗号表达式的值。
(b=4*5,b*2)一句,先处理左边的b=4*5,得到b=20;然后处理右边的b*2,得20*2=40,整个括号内表达式的值为最右边的b*2表达式的结果40。接着处理右边的表达式b+6,得20+6=26,整行表达式的值为最右边的b+6的结果26。但这个值没有被赋予给任何变量,于是被舍弃。
printf("%d\n",(a=3*5,a*4,a+5)); 一句,先处理括号内最左边的表达式a=3*5,得到a=15;接着处理a*4,得15*4=60;最后处理a+5,得15+5=20。整个括号表达式的值等于最右边的表达式a+5的值20,该值被压栈到printf函数中%d的位置,然后输出,得20。
printf("%d\n",b),输出b的值20。
(b=4*5,b*2)一句,先处理左边的b=4*5,得到b=20;然后处理右边的b*2,得20*2=40,整个括号内表达式的值为最右边的b*2表达式的结果40。接着处理右边的表达式b+6,得20+6=26,整行表达式的值为最右边的b+6的结果26。但这个值没有被赋予给任何变量,于是被舍弃。
printf("%d\n",(a=3*5,a*4,a+5)); 一句,先处理括号内最左边的表达式a=3*5,得到a=15;接着处理a*4,得15*4=60;最后处理a+5,得15+5=20。整个括号表达式的值等于最右边的表达式a+5的值20,该值被压栈到printf函数中%d的位置,然后输出,得20。
printf("%d\n",b),输出b的值20。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
括号会返回最后一个值,但是前面的逗号都会运算(a=3*5/*这个时候a被赋值*/,a*4/*这个值是60但对a没有影响*/,a+5/*这个值是20*/)括号最后的值是20,所以括号的值就是20。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第七行的应该是printf("%d%d%d\n",(a=.....))
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询