C语言的一道题,恳请明白人指点,悬赏分追加!!

来源:百度知道 编辑:UC知道 时间:2024/06/04 01:55:47
#include<stdio.h>
main()
{int i,j;
i=16;
j=(i++)+i;
printf("%d\t",j);
i=15;
printf("%d\t%d",++i,i)}
输出结果为?【答案】32 16 15
为什么?怎么来的,我得34 16 16,我错在哪?
讲明白了我会追加悬赏分的,多谢帮忙!!

1,j=(i++)+i;
i++;只在表达式运算结束后对i加1运算,相当于j=i+i,i++;

2,printf("%d\t%d",++i,i)}
printf ("",)括号内的表达式是自右向左运算的;
明白了吧

#include<stdio.h>
main()
{int i,j;
i=16;
j=(i++)+i; //这句话的执行顺序是先取i值再自加 所以j=16+16=32 随后再自加1
printf("%d\t",j); //输出33
i=15;
printf("%d\t%d",++i,i)} //先自加后输出i值 所以应该是16 16
答案也有一点问题

j=(i++)+i;
因为i++在()中,所以和++i己经没区别了。
先 i++得到i=16
然后j=i+i=32;
第一次输出32

printf("%d\t%d",++i,i);
因为在同一条语名中,++i和i是并列关系。具体来说,参数是倒着推入栈的,所以++i比i后取。你可以printf("%d\t%d\t%d\t%d",i,i++,i++,i++);来试,一定会满意的。学过Win32汇编会对参数的推入比较清楚。

强烈BS加Q讲的,要的就是大家交流,你还怕错误答案被大家看到么?

加qq: 421668239



楼上的前一半在下强烈赞同, 但是后面是否有点偏激了?

这个嘛……
没看出来……