C语言问题。这题怎么理解~谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/08 10:14:32
28.下列程序的运行结果是( )。
main()
{
int i=3;
printf("%d,%d,%d\n",i,i++,i++);
}
A. 5,5,4 B. 3,4,5 C. 3,3,4 D. 5,4,3

C
假如i=3
i++:+号在后面,就是运算后i加1.
++i:+号在前面,就是运算前i加1.
两者异同:i的值都是4,但是i++的值是3,++i是4。
所以,i是3,i++是3,之后i变成4,i++也是4.

D
i,i++,i++逗号表达式是自右向左运算,输出是自左向右输出,所以先执行右边第一个i++,i=3后自增1,i=4了,再执行第二个i++,i=4再自增1,i=5了,最后是i,i=5
结果为5 4 3

这个题应该选最后一个,因为这个表达式中的三个i 值是从后向前算的,也就是说先算最右边的i++,得到(i++)的值为3,然后i的值为4(第二个值),再执行i++,所以第一个值就是5了

输出i=3
i++ 后加 意思是先取当前值i=3,输出i后,然后i值+1,此时i=4;
i++ 后加 同上,i当前值=4,输出i后,i值加1 i=5
3 3 4
选C

应该是C 因为 i++ 是先用i做当前任务 再将i+1,而++i 是先将i+1 在做当前任务

VC环境下的结果为3,3,3
因为一般编译器是从右往左计算,并且后++不起作用。具体来说是参数从左向右入栈,出栈是从右向左了。
所以参数的执行顺序为i++,i++,i,因为后++不起作用。故结果为3,3,3
给几个例子参考:
printf("%d,%d,%d\n",i,++i,i++);
结果为4,4,3
printf("%d,%d,%d\n",--i,++i,i++);
结果为3,4,3