c语言这个逗号表达式的结果是什么,为什么?
intmain(intargc,char*argv[]){inta=10,b=20,c=30;printf("%d%d%d\n",a+b+c,b=(c*2),c=(c+b...
int main(int argc, char *argv[])
{
int a=10,b=20,c=30;
printf("%d %d %d\n",a+b+c,b=(c*2),c=(c+b));
return 0;
} 展开
{
int a=10,b=20,c=30;
printf("%d %d %d\n",a+b+c,b=(c*2),c=(c+b));
return 0;
} 展开
展开全部
逗号表达式:
(1) 逗号表达式的运算过程为:从左往右逐个计算表达式。
(2) 逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。
(3) 逗号运算符的优先级别在所有运算符中最低。
但你这个不是逗号表达式,是函数调用的逗号,顺序应该从后往前入栈,即先算c=(c+b),再算b=(c*2),最后算a+b+c。
计算c=(c+b),c变成50,输出的最后一个数是50。
计算b=(c*2),b变成100,输出的最后一个数是100。
计算a+b+c,输出的最后一个数是160。
答案:160 100 50
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一,printf("%d %d %d\n",a+b+c,b=(c*2),c=(c+b));这个根本就不是逗号表达式,这里的逗号只是参数间的分隔符,而不是逗号运算符
第二,printf虽然是c_decl的自右向左压栈的,但是你这里有赋值语句,其副作用何时发生,标准里是未定义的,所以这是未定义的行为,故无解
第二,printf虽然是c_decl的自右向左压栈的,但是你这里有赋值语句,其副作用何时发生,标准里是未定义的,所以这是未定义的行为,故无解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
160 100 50 这个是结果
汗,把我原来的答案给弄没了,再说一次:
这里面没有逗号表达式
是从后往前计算。
汗,把我原来的答案给弄没了,再说一次:
这里面没有逗号表达式
是从后往前计算。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
从左往右逐个计算表达式 取最左边的值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询