关于c语言中的类型转换问题

cj04124195 2010-12-21 06:49:38
在vc中运行如下代码:
void main()
{
int a;
double b;

a=5;b=a;
printf("%f\n",b);
b=5.1;a=b;
printf("%d\n",a);

printf("%f\n",5);
printf("%d\n",5.1);
}
输出结果如下:
5.000000
5
0.000000
1717986918
前两个结果没有问题,但是后两个输出我不能够理解。
printf("%f\n",5);不是应该先将5转换成double型吗?为什么不是5.000000而是0.000000?
printf("%d\n",5.1);不是会先将5.1转换成int型吗?为什么不是5而是一个很大的数?

请高人对printf的工作机制说明一下,如果可以将scanf的工作机制也讲讲。

...全文
115 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
狗狗 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jackyjkchen 的回复:]
这里不算类型转换,在格式说明符错误的情况下,输出结果未定义
[/Quote]
这个说法欠妥,如果说结果未定义。那么每次输出的结果是不一样的。
可是事实上每次输出的结果是固定的。
就想叫yoko 2010-12-21
  • 打赏
  • 举报
回复
这里要的不就是纯粹的吗?与其写一句printf("%f\n",5);
干吗不写printf("5.000\n");呢?
这里需要的输出是什么写代码的人不是已经知道了吗
[Quote=引用 5 楼 jackyjkchen 的回复:]
引用 3 楼 q191201771 的回复:

这个我也不知道, 不过可以直接输出嘛printf("5\n");

你这是纯粹的字符串……
[/Quote]
yuppy 2010-12-21
  • 打赏
  • 举报
回复
第二个问题一般double是8个字节,%d取了4个, 就知道这么多了..
xiongwei_13 2010-12-21
  • 打赏
  • 举报
回复
5在内存中为00000000,00000101, printf里边不能改变状态,只是把内存里的那个5输出来了吧
yuppy 2010-12-21
  • 打赏
  • 举报
回复
printf("%f\n",5);
这个整型5好像不会被隐式类型转换为浮点型,而是被直接按内存内容当作浮点型

整型3在内存布局上如果看成浮点数,它就是接近于0

这里有分析http://blog.csdn.net/arong1234/archive/2008/05/18/2456455.aspx

jackyjkchen 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 q191201771 的回复:]

这个我也不知道, 不过可以直接输出嘛printf("5\n");
[/Quote]
你这是纯粹的字符串……
無_1024 2010-12-21
  • 打赏
  • 举报
回复
溢出的问题 精度不符合 应该用const_cast来转换 实现
就想叫yoko 2010-12-21
  • 打赏
  • 举报
回复
这个我也不知道, 不过可以直接输出嘛printf("5\n");
jackyjkchen 2010-12-21
  • 打赏
  • 举报
回复
这里不算类型转换,在格式说明符错误的情况下,输出结果未定义
無_1024 2010-12-21
  • 打赏
  • 举报
回复
5和5.1 是const类型 必须显示转换

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧