免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 19209 | 回复: 10
打印 上一主题 下一主题

(int&)a是表示什么意思啊? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-17 09:12 |只看该作者 |倒序浏览
float a = 1.0f;
cout << (int)a << endl;
cout << (int&)a << endl;
cout << boolalpha << ( (int)a == (int&)a ) << endl;
float b = 0.0f;
cout << (int)b << endl;
cout << (int&)b << endl;
cout << boolalpha << ( (int)b == (int&)b ) << endl;
输出什么? 为什么?

论坛徽章:
0
2 [报告]
发表于 2006-10-17 09:35 |只看该作者
我主要不明白的还是"(int)a 和 (int&)a"
这两者有什么关系么??

论坛徽章:
0
3 [报告]
发表于 2006-10-17 09:36 |只看该作者
试下你的输出是什么?顺便贴出来让大家看了,再回答你的问题。
看来也就是个地址。

论坛徽章:
0
4 [报告]
发表于 2006-10-17 09:39 |只看该作者
原帖由 huaxue 于 2006-10-17 09:35 发表
我主要不明白的还是"(int)a 和 (int&)a"
这两者有什么关系么??

(int)a 强制类型转换
(int&)a 引用.也就是变量的别名.   
  需要在定义时指定所引用的变量,新定义的变量(这里的a),也就是所引用变量的别名.   
  在下文中对a的引用都等于旨用原变量.

[ 本帖最后由 lonelyair 于 2006-10-17 09:43 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-10-17 09:41 |只看该作者
(int&)a 和 *((int*)&a)是一样的
把&a这个地址上32位数看作int型

论坛徽章:
0
6 [报告]
发表于 2006-10-17 09:45 |只看该作者
你这道题前面半截会输出false,因为1.0(float)和1(int)在内存中的表示不一样
后半截会输出true,因为0.0的浮点表示和0的整形表示在内存中是一样的

论坛徽章:
0
7 [报告]
发表于 2006-10-17 10:05 |只看该作者
输出结果如下说明:
#include <iostream>
int main( void )
{
    float a = 1.0f;
    cout << (int)a << endl;                                                   1
    cout << (int&)a << endl;                                                 1065353216
    cout <<  ( (int)a == (int&)a ) << endl;                             0
    float b = 0.0f;                                                                  
    cout << (int)b << endl;                                                     0
    cout << (int&)b << endl;                                                   0
    cout <<  ( (int)b == (int&)b ) << endl;                              1
    return 1;
}

论坛徽章:
0
8 [报告]
发表于 2006-10-17 10:14 |只看该作者
你可以说得详细点吗??
cout << (int&)a << endl;                                                
1065353216??为什么会输出这个结果??
谢谢!

论坛徽章:
0
9 [报告]
发表于 2006-10-17 10:19 |只看该作者
原帖由 huaxue 于 2006-10-17 10:14 发表
你可以说得详细点吗??
cout << (int&)a << endl;                                                
1065353216??为什么会输出这个结果??
谢谢!



是a的地址,如果按16进制输出的话,应该是4字节的地址。
int(&a)相当于输出a的地址,你可以把它看成&a, 只不过是这里被转换为int类型的地址。

论坛徽章:
0
10 [报告]
发表于 2006-10-17 10:42 |只看该作者
人家说的是(int&)a不是(int)&a,
输出的那个数字就是把2进制的浮点看成是int的结果,不是什么地址
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP