1,之所以没输出5,这是C语言设计的原因。2,之所以输出0,这是计算机体系结构的问题。 具体来说: printf函数不会进行任何类型转换,它只是从内存中读出你所提供的元素的值(按照%d,%f等控制字符提示的格式)。C语言设计中,int类型一般是32bit或者16bit,而float一般是64bit,并且有可能使用科学计数保存。这点就和huhugo88所说一样,5在内存中为00000000,00000101。而且5一般都在静态区,程序的静态存储区默认是0,那么当用%f来读时,就会读64bit,也就是会读之前的很多位0,最后按照(有效数字)×(基数2)pow(指数)的方式来取数,自然结果是0 之所以Vc中不允许这种情况,而有些编译器就允许这么输出就是编译器设置的问题。按理说,这样访问内存是属于越界访问,应该禁止。不过只是读,伤害性不大而已。-----------规范方法:
- 使用正确的格式 比如printf("%d\n", 5);
- 如果一定要用%f 那么让系统知道你的5是float型的。 具体的有两种方法
1) printf("%f\n",5.0); 带上小数部分,就默认为浮点型了
2) 强制类型转换 printf("%f", (float)5);
时间: 2024-10-13 06:41:48