这个很好解释,尾部和前部拼接到一起,结果自然不乐观了 实际参数类型: char * , double ,double 参数传递时的长度 :[ 4B ] ,[8B ] ,[8 B ] 格式串和对应的格式 :格式串 , %d , %f 输出时看作的长度 :[ 4 B ] ,[ 4B],[8B ],[4B] 最后4B是多余的,无用参数字节。 输出时直接看作的类型:const char * ,int ,double 输出时最终看作的类型:const char *,int ,float 第2,3 两个个参数,被劈为两半 第2参数,前一半,对应 %d 格式 4B,后一半对应%f格式 8B 差了4B,第三个参数的前4B补上。最后4B,用不上,不管他。 PS: 输出时,不论实参是double 还是 float , %f对应 float 数据,所以要转换成 float 输出,会造成精度丢失。 所以double 不应该使用 %f 输出。 同理,%lf 对应double, float类型,没有必要用 %lf输出。 因为,float 表示精度太低; 不需要用%lf,这种高精度方式输出。
doule类型用%lf,否则结果难料。 [quote=引用 楼主 u013487029 的回复:] 小程序如下: #include <stdio.h> main() { double dValue = 2.0; printf("%d\t%f",dValue, dValue); } 结果答案凶残的输出:0 0.000000 为什么呢?
小程序如下: #include <stdio.h> main() { double dValue = 2.0; printf("%d\t%f",dValue, dValue); } 结果答案凶残的输出:0 0.000000 为什么呢?
69,371
社区成员
243,082
社区内容
加载中
试试用AI创作助手写篇文章吧