首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

Linux下C类型变量转换有关问题

2013-12-20 
Linux下C类型变量转换问题写了一个代码,输出结果和预想不符,代码如下:#include stdio.hint main(void){u

Linux下C类型变量转换问题
写了一个代码,输出结果和预想不符,代码如下:

#include <stdio.h>

int main(void)
{
unsigned int a = 200, b = 1, c = 0;
double d = 0;
c = (a - b)/10.0;
d = (a - b)/10.0;
double myvar = (a - b)/10.0;
printf("c: %f, d: %lf, myvar: %lf\n", c, d, myvar); //myvar的结果不对
return 0;
}

输出结果:c: 19.900000, d: 19.900000, myvar: 0.000000
为什么最后一个为0.000000啊?

[解决办法]
栈被你弄错了,
printf 看到第一个
%f是,知道你后面有个8字节的double,所以读出一个double,可实际上这个double是你入栈的两个unsigned int c,d构成的,至于c,d为什么能拼成19.900000,你就自己百度double的结构吧
然后看到第2个%lf,知道你后面是一个double,注意,printf 把你的unsigned int c,d看成一个double,所以你第2个%lf实际上读的是myvar这个double,所以是19.900000
第3个%lf,实际上栈中已经没有数值了,读到的东西只不过是栈中的残余内容,恰巧和0.000000差不多,,,

热点排行