i++求解
#include<stdio.h>int main()
{
int i;
printf("%d %d %d",i=1,i+5,i++);
return 0;
}
为什么输出是这样的呀
第四行的i没有定义吧 这个问题出现过多次了,看这篇帖子里我的答案,在5楼
https://fishc.com.cn/forum.php?mod=redirect&goto=findpost&ptid=155919&pid=4343099
我用VC6.0看了下汇编代码
printf函数是从右往左进行操作的,你会发现int i 之后,你直接i++,还有i+5,你都没有对i初始化,当然各种值都有可能
27: printf("%d %d %d",i=1,i+5,i++);
0040F4B8 8B 45 FC mov eax,dword ptr
0040F4BB 89 45 F8 mov dword ptr ,eax
0040F4BE 8B 4D F8 mov ecx,dword ptr
0040F4C1 51 push ecx
0040F4C2 8B 55 FC mov edx,dword ptr
0040F4C5 83 C2 05 add edx,5
0040F4C8 52 push edx
0040F4C9 C7 45 FC 01 00 00 00 mov dword ptr ,1
0040F4D0 8B 45 FC mov eax,dword ptr
0040F4D3 50 push eax
0040F4D4 68 AC 2F 42 00 push offset string "%d %d %d" (00422fac)
不懂就不要这么用。
就算是懂也不要这么写程序,这样写出来程序可读性差,过段时间自己都看不懂了,而且容易造成逻辑混乱。
++,--这种运算尽量不要用在特别复杂的表达式中。 最好是定义在外面,Printf是从右往左按照栈顺序来操作的 我运行了楼主的代码,打印的结果和你一样,下面来分析一下:1. int i;声明之后没有初始化,根据运行结果应该是将其自动初始化为0了。
2.printf函数是从右往左运算的,也就是说先算i++,由于i为0,所以i++的值也为0,但此时i == 1;
3.i + 5,当然就是1 + 5喽;
4.i = 1,其实你只写一个i也是一样的,也会打印1的{:10_264:};
5.重点来了,虽然printf()函数是从右往左运算的,但是它的打印顺序依然是从左往右哦,你可以理解为先把要打印的东西计算了一遍(从右往左),再按计算出的值按顺序从左往右打印出来,就会出现楼楼的结果啦{:10_297:}!!!
major_lyu 发表于 2020-3-5 22:12
不懂就不要这么用。
就算是懂也不要这么写程序,这样写出来程序可读性差,过段时间自己都看不懂了,而且容 ...
就是突发奇想,试了一下,发现结果出乎我的意料{:10_269:}谢啦 jzzc 发表于 2020-3-6 15:20
我运行了楼主的代码,打印的结果和你一样,下面来分析一下:1. int i;声明之后没有初始化,根据运行结果应 ...
明白明白,谢谢{:10_323:}
页:
[1]