下面这四张图到底是为啥?

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/24 09:27:26
下面这四张图到底是为啥?
xUNW+RV}*JyjahM'&"6 I sf_!$ %~sg,6:)IgOIAZyZ;'- iO#_6d?yٿ BOF&~D=1:>5>T=?9jxuuvDF(2i?`"VMU58^ǚe:DzV@J+X, J$[K(_&y%,cϱ2kH%YYIRy8Ҵ+b3',q7Y[&niI"RxU]Ldl`(`g3ΰXD.`$b X|3 )JaEX1Lɐ""J"k KBee | (LB,#SA V4lY|3TA0qTK09EceE69RD C</(2L1k!9~2oH_g*0ǛHd!X];C_!99pNnmT4zO<Ǧ,wieeoĚS%:RܦHK f$E^,2PLo4])3E=jCj x

下面这四张图到底是为啥?
下面这四张图到底是为啥?



下面这四张图到底是为啥?
这个不算奇怪.
printf由于输出列表可变,因此函数没有原型,不做强制转换;如果类型不匹配,比如int作浮点输出,行为可以是不定的,由各个编译器自行处理.
① i = 50,这个整数,在电脑里面存储格式是16进制的0x32.printf的时候,如果没有强制转换((float)i),而是按照float来理解i,那么0x32,按浮点数换算,就是十进制的0 (这个是在一般的汇编教材中的浮点章节都有说明,网上的教程也很多); 而如果类型转换了,浮点数50.0的16进制应该是0x42480000.
② 这个有点问题.如果你显示的是完整的,那么应该是和你的编译器有关.看你的截图,应该是64位Windows下的Dev-C++环境.但不知道你的编译器是MinGW 32位还是TDM-GCC x64?如果是,应该检查编译器本版是多少?尽量下载新的,稳定版本.你是在Dev-CPP的集成环境中直接F10运行结果的吧?建议没有修改代码后,先F12重建一下,然后再运行.
这个在我的测试环境里面,显示的是50 0.000000 50
③ 这个问题同前.printf因为可以接受动态格式数组,所以特意设计成运行时刻才决定行为的.也许是某版本的编译器的问题,导致了数据对齐或边界溢出问题.如果可能,可否说明编译环境,或干脆附上你的全部工程文件?
④ 这个好理解.&i是变量i的内存地址,因此最后打印的不是i的值,而是i的地址所对应的16进制地址,然后被按照%d的十进制表示出来了.
关于图2,3里面的最后一位i,对照图4里面的&i,怎么感觉你前面都是按照&i输出的?