[C/C++](int)a,&a,(int)&a,(int&)a区别小结
2014-03-25 21:43
387 查看
1.首先以下述代码为例:
#include <iostream> #include <stdio.h> #include <string.h> #include <conio.h> using namespace std; int main() { float a = 1.0f; cout << (int)a << endl; //将浮点型强制转换为整型1 cout << &a << endl; //取a的地址十六进制00A7FD68 cout << (int)&a << endl; //把a的地址强制转换成十进制的整型11009384 cout << (int&)a << endl; //将a的引用强制转化为整型 return 0; }
输出结果如下:
"cout << (int&)a << endl;"输出的结果是1065353216, 而不是1。这是因为浮点数在内存里和整数的存储方式不同,(int&)a相当于将该浮点数地址开始的sizeof(int)个字节当成int型的数据输出,因此这取决于float型数据在内存中的存储方式,而不是经过(int&)a显示转换的结果(1)。
因为float a = 1.0f在内存中的表示都是3f800000,而浮点数和一般整型不一样,所以当(int&a)强制转换时,会把内存值3f800000当作int型输出,所以结果自然变为了1065353216(0x3f800000的十进制表示)。
要解释一下(int&)a:将a的引用强制转换为整型,意思是a所在的内存,原来定义的时候是float型,并初始化为1.01f,但现在要按int类型解释这段内存(即a所在的内存地址中的数据本来是按float型存储表示的,现在要强制按int型来解释)。
1.0f在内存中的存储为(浮点型在内存中的表示详见此链接)
0 01111111 00000000000000000000000.
按照整型数解释为2^29 + 2^28 + 2^27 + 2^26 + 2^25 + 2^24 + 2^23 = 1065353216(0x3f800000的十进制表示)。
所以cout << (int&)a << endl;的结果就是1065353216。
2.(int&a)
(int&)a相当于:*(int*)&a,*(int*)(&a),*((int*)&a)。再比较一下(int&)a和(int)a
(int&)a 不经过转换,直接得到a在内存单元(即地址)的值(引用即别名,通过引用是可以直接访问到实参和控制参数的)。
(int)a a在内存中的值转换成int型。
本文参考http://wenku.baidu.com/link?url=76IpDCg9rWlQpZZnYON7NIYkl4BHY24rI6cyEso0XccroC9V6VCpDSr_AYuSY9Xzg3eNNYE6rKG8aJH5hhA-r7aNcS3RO0REFrpUIXFtFHG
本文不详尽或错误之处,请各位不吝言辞,多多指教~谢谢~
作者:Louise http://blog.csdn.net/yupingliu
相关文章推荐
- C++中static_cast、const_cast、reinterpret_cast的用法举例,附带举例说明强制类型转换时int和int&的区别
- C++中static_cast、const_cast、reinterpret_cast的用法举例,附带举例说明强制类型转换时int和int&的区别
- [c/c++语言知识点1]int a, (int) &a, (int &)a区别
- C++中(int&)和(int)的区别
- C++中int、int&、int*和int**的区别与联系、用途
- C++ 常引用 const int &a 的作用和区别
- [C/C++]数组与指针——a,a[0],&a,&a[0]区别小结
- c++中vector<int>和vector<int*>的用法区别
- 浅谈C++和C#的区别&C#与.NET的关系
- C字符串和C++中string的区别 &&&&C++中int型与string型互相转换
- c++学习之new int()和new int[]的区别
- C++中引用(&)的用法和拷贝/赋值函数的区别
- int *pa(指针)和int *&pa(指针的引用)的区别
- const int & 和 int 的区别
- C++中运算符 &和&&、|和|| 的区别
- 有关(int&)和(int)的区别
- 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)
- const int& x和 int const &x真的有区别嗎?
- int&boolean——Java和C的一点小区别
- (int&)a和(int)a的区别