关于引用的讨论
来源:互联网 发布:编辑网络大赛 编辑:程序博客网 时间:2024/05/01 03:40
郑飞龙 17:17:04
这个是一道面试题,不知道这题是什么意思?
beyond(jzk) 17:19:55
我也弄不明白...
beyond(jzk) 17:20:15
我感觉输出应该是false true
郑飞龙 17:20:45
答案就是这样
郑飞龙 17:20:49
你是怎么看出来的
beyond(jzk) 17:22:43
float 1.0f = 0x37ff..反正是浮点数的表示..
float 0.0 =0.
beyond(jzk) 17:24:41
1.0=3f80000h
郑飞龙 17:24:48
恩,内存中好像就是这样的
beyond(jzk) 17:24:49
0.0=00000000
beyond(jzk) 17:25:22
(int)a = ftoi(a)=1.
郑飞龙 17:25:38
恩,后面的呢
beyond(jzk) 17:25:54
(int&)a=0x3f800000
郑飞龙 17:26:23
为什么(int &)a
郑飞龙 17:26:46
就是你说的那个值呢
beyond(jzk) 17:27:03
我感觉(int &)a=(int)(int*)a
郑飞龙 17:27:19
这个意思是不是相当与把一个浮点数当作整形给输出了
beyond(jzk) 17:27:40
(int)a这个比较明显=1.
郑飞龙 17:27:49
恩,这个比较明显
beyond(jzk) 17:28:41
(int&)a我理解的就是把a的内容也就是0x3f800000转换成一个地址=0x3f800000
beyond(jzk) 17:30:38
这个题应该是考的浮点数的内存表示吧..
郑飞龙 17:31:10
int & r = (int &)a;
郑飞龙 17:31:32
那么这里的r应该怎么理解?
郑飞龙 17:32:04
r 是你刚才说的那个地址是对应的
郑飞龙 17:33:00
cout<<r,相当于输出了0x3f800000单元的内容?
beyond(jzk) 17:33:24
..我看晕了..
郑飞龙 17:36:21
但是我输出r,r的值还是0x3f800000
beyond(jzk) 17:36:23
哪个公司的面试题
郑飞龙 17:36:44
EMC
郑飞龙 17:36:51
易安信
beyond(jzk) 17:37:30
如果输出是0x3f800000的话,那应该得有一个中间变量..
beyond(jzk) 17:37:53
你调试看一下..
郑飞龙 17:38:12
你说的中间变量,指的是什么 ?
beyond(jzk) 17:39:10
(int&)a,不然r引用的地址在哪里..
beyond(jzk) 17:40:41
你看看(int&)a 是不是等于(int)(int*)a
郑飞龙 17:40:50
我调试的时候看,VC好像给r开了一个空间,那个空间存的内容就是a变量的地址。
beyond(jzk) 17:41:34
那样的话,r就是一个指针了..
郑飞龙 17:42:07
我估计底层都是这样实现的
beyond(jzk) 17:42:20
可能吧..
beyond(jzk) 17:43:08
再遇到这种题,可以现根据自己的理解解答..
郑飞龙 17:44:32
调试的时候,&r和a的地址一样,真让人费解
郑飞龙 17:44:42
编译器把我都搞晕了
beyond(jzk) 17:45:37
...
郑飞龙 17:46:09
调试是这样,我晕的不行,实在是理解不了
郑飞龙 17:48:32
算了,太细了,也没什么意思
beyond(jzk) 17:48:37
这样理解你看行不行,反正引用肯定对应一个变量..
郑飞龙 17:48:48
恩
beyond(jzk) 17:49:15
对于int& r=(int&)a.这个句子里面只有一个变量a
郑飞龙 17:49:23
恩
beyond(jzk) 17:49:52
所以r应该是a的地址别名..
郑飞龙 17:50:01
恩
beyond(jzk) 17:50:08
a的地址里放的是0 3f800000
beyond(jzk) 17:50:19
0x3f800000
郑飞龙 17:50:56
恩
beyond(jzk) 17:51:29
不管a是什么类型,他地址里的16进制内容是一样的..
郑飞龙 17:51:42
恩
beyond(jzk) 17:52:42
只是因为引用的类型是int型的,所以输出的是3f800000的int型值..
beyond(jzk) 17:54:00
float& m=(float&)a;
beyond(jzk) 17:55:37
(float&)a==a
郑飞龙 17:56:01
恩,我明白了一点
beyond(jzk) 17:56:41
(int&)a==*(int*)&a
(int&)a 是取地址,地址类型转换,取内容的简写形式.相当于*(int*)&a;
不管a是什么类型 (int&)a==*(int*)&a这个等式都成立
float a=1.0f;
int& r=(int&)a;这一句是后,r是一个指向a地址的int型引用,输出r相当于输出a地址的整形内容
对于这个例子
cout<<r<<endl;
的结果为0x3f800000.
- 关于引用的讨论
- 关于引用&的讨论
- 关于指针与引用的讨论
- 关于C++中函数返回引用的讨论
- 关于C++中函数返回引用的讨论
- 关于C++中函数返回引用的讨论
- 关于C++中函数返回引用的讨论
- 关于C++中函数返回引用的讨论
- 关于C++中函数返回引用的讨论
- 关于const限定符和const引用的讨论
- 关于在c#和Java中使用“引用”的讨论
- 关于传值与传引用的讨论
- 基础备忘:关于传值与传引用的讨论
- 关于引用数据类型的形参与实参讨论
- C++引用的讨论
- 循环引用的讨论
- 关于checkpoint的讨论
- 关于checkpoint的讨论
- 长整型或长double型字符串数据 转换为 double
- Linux操作系统命令操作小知识
- 程序crash后为什么没有启动JIT调试器?
- 我那时苦着呢,经常吃不饱饭,也没什么新衣服穿......
- 汇编程序中将通用寄存器置0的N种方法
- 关于引用的讨论
- 常用热门网摘代码的收集
- Win32消息处理API---GetMessage
- 语音+视频+数据+mpls经典配置
- 十六进制字符串转换为十进制数
- Detours x64
- Win32消息处理API---PeekMessage
- 查询表的主外键信息sql
- detours, x86 kernel hook 以及 x64 kernel hook