晃晃悠悠

isrobert

  VC知识库BLOG :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 登录 ::
  12 随笔 :: 0 文章 :: 33 评论 :: 0 Trackbacks
<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

留言簿(0)

随笔分类

随笔档案

文章档案

相册

收藏夹

相关链接

搜索

最新评论

阅读排行榜

评论排行榜

http://www.vckbase.com/bbs/viewtopic2.asp?rid=2866719&sf=27&forumID=99&pg=4

这回就不会没了,呵呵~
posted on 2007-01-24 11:16 isrobert 阅读(1488) 评论(8)  编辑 收藏

评论

# 上点有内容的 2007-01-24 12:47 局部变量
水源的过几天就没了

# re: 20070124-关于c,c++对函数的类型检查问题 2007-01-24 12:53 清风雨
C++有多态,但是你没有定义f( float )的实现,所以连接无法通过。
C通过函数名连接,你看看5.5作为内存的内容,应该就是1085276160。

# to:清风雨 2007-01-24 17:50 isrobert
第一点,你说的对,我没有实现f(float)
第2点,你说得对,我做过测试,如果正常
float a = 5.5;
printf("%d\n",a);
结果应该是0,所以答案如果是1085276160也就只能解释为地址了。但是我还有点不明白,如果是地址,每次应该不一样,可是我试验了10多次,结果依然是1085276160。我不太明白~

# re: isrobert 2007-01-25 09:05 清风雨
不是地址,是5.5的浮点数表示的内存,这个内存被做为整数解释了——正常情况解释为浮点就是5.5f,但解释为整数就成了1085276160。

内存里是:1字节显示 00 00 b0 40 ;4字节显示 0x40b00000,转换为整数就是1085276160。—— 直接用VC的调试器看就可以看到了。



# re isrobert: 2007-01-25 16:51 周星星

“float a = 5.5;
printf("%d\n",a);
结果应该是0,所以答案如果是1085276160也就只能解释为地址了”

--- 这又涉及到另外一个问题了,即:“float在入栈时,自动转化为double”,然后你又用"%d"只取了这8字节double中4字节,……

你可以这样试验
#include <iostream>
using namespace std;

int main()
{
    float a = 5.5f;

    // 方法一
    union X
    {
        float f;
        int d;
    } x;
    x.f = a;
    cout << x.d << endl;

    // 方法二
    cout << *(int*)&a << endl;

    方法三
    cout << (int&)a << endl;
}



# to:星星 2007-01-25 18:51 isrobert
你的例子我试验过了,但是有一点我想问
float a = 5.5f;
cout << dec << a << endl;
cout << a << endl;
输出结果为什么一样?第一个输出明明是按照十进制输出的呀~
如果改成cout << dec << (int)a << endl;输出就是5了,为什么不改不行?

# re isrobert: 2007-01-26 09:40 周星星
dec是控制整型的,a又不是整型。

# re: 20070124-关于c,c++对函数的类型检查问题 2007-01-26 10:43 isrobert
哦,谢谢**~
谢谢清风雨 too~

标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]