C语言逗号表达式问题?
如(a=4*5,a*2),a+6;题目要求这个表达式的值,计算机运行结果为40,但是老师说结果为26,我想问一下逗号表达式括号外面的a+6算进逗号表达式了吗?...
如(a=4*5,a*2),a+6;题目要求这个表达式的值,计算机运行结果为40,但是老师说结果为26,我想问一下逗号表达式括号外面的a+6算进逗号表达式了吗?
展开
3个回答
展开全部
a+6当然是逗号表达式的一部分。实际上,(a=4*5,a*2),a+6是由两个逗号表达式组成的,(a=4*5,a*2)是第1个逗号表达式,它的计算结果与a+6一起构成了第2个逗号表达式。而逗号表达式的结果是最右边那个子表达式计算的结果。
(a=4*5,a*2)是这样计算的:
因赋值运算的优先级高于逗号表达式,因此,先算a=4*5,结果是a=20,再算a*2,所以逗号表达式(a=4*5,a*2)的结果是40。
所以,第1个逗号表达式计算完后有:
a=20
第2个逗号表达式是40,a+6,经计算后,第2个逗号表达式的结果是26(即最右边那个子表达式a+6的值)。
但如果要输出整个逗号表达式的值,不能用printf("%d",(a=4*5,a*2),a+6);因为这是在调用函数,(a=4*5,a*2),a+6被看成了向函数传递的两个参数(即多传了一个参数a+6),而不是作为一个逗号表达式。因为函数调用会忽略所有多传递的参数,所以,以上的函数调用就相当于printf("%d",(a=4*5,a*2));,输出的是40。而printf("%d",((a=4*5,a*2),a+6));才会输出整个逗号表达式(a=4*5,a*2),a+6的值26,这一点需要注意。
(a=4*5,a*2)是这样计算的:
因赋值运算的优先级高于逗号表达式,因此,先算a=4*5,结果是a=20,再算a*2,所以逗号表达式(a=4*5,a*2)的结果是40。
所以,第1个逗号表达式计算完后有:
a=20
第2个逗号表达式是40,a+6,经计算后,第2个逗号表达式的结果是26(即最右边那个子表达式a+6的值)。
但如果要输出整个逗号表达式的值,不能用printf("%d",(a=4*5,a*2),a+6);因为这是在调用函数,(a=4*5,a*2),a+6被看成了向函数传递的两个参数(即多传了一个参数a+6),而不是作为一个逗号表达式。因为函数调用会忽略所有多传递的参数,所以,以上的函数调用就相当于printf("%d",(a=4*5,a*2));,输出的是40。而printf("%d",((a=4*5,a*2),a+6));才会输出整个逗号表达式(a=4*5,a*2),a+6的值26,这一点需要注意。
展开全部
#include<stdio.h>
int main() {
int a;
printf("%d",((a=4*5,a*2),a+6));
return 0;
}
算进去了,你可能是没加括号直接输出了,这道题应该加上括号,不太严谨,但出题人的意思应该是求((a=4*5,a*2),a+6)
int main() {
int a;
printf("%d",((a=4*5,a*2),a+6));
return 0;
}
算进去了,你可能是没加括号直接输出了,这道题应该加上括号,不太严谨,但出题人的意思应该是求((a=4*5,a*2),a+6)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |