&和static_cast<void *>的区别

来源:百度知道 编辑:UC知道 时间:2024/05/16 10:35:53
double a=1;

double *b=&a;
//double a=a;
// b=a;
cout<<&b<<" "<<static_cast<void *>(b)<<endl

书上说Static_cast<void *>也是取地址的
但是与&所得到的地址为什么 不一样
数据类型的转换 比如double型 的数据在内存中占4个字节(abcd),转换成void *时,将这4个字节中的数据复制到另外4个字节(1234)中去,是不是这样的

&运算符是直接取地址,而static_cast<void*>是将b先转换成void*,然后再输出这个指针的地址,这个过程中涉及到C++非常底层有关指针地址运算的东西。
个人觉得如果不是十分必要,用不着深抠,理解会用指针及其地质即可。

“数据类型的转换 比如double型 的数据在内存中占4个字节(abcd),转换成void *时,将这4个字节中的数据复制到另外4个字节(1234)中去,是不是这样的”
不是的。当对double类型进行强制转换的时候,内存本身的东西是不会变化的,只是把指向该处的指针装置转换成(void*),不会发生任何复制的操作.
我用下面的代码进行了一下测试:
double a=10.0;
double *b=&a;
cout<<"&a = "<<&a<<"\tstatic_cast<void*>(&a) = "<<static_cast<void*>(&a)<<endl;
cout<<"b = "<<b<<"\tstatic_cast<void*>(b) = "<<static_cast<void*>(b)<<endl;
这是得到的结果,看得出这些地址都是一样的
&a = 0012FE94 static_cast<void*>(&a) = 0012FE94
b = 0012FE94 static_cast<void*>(b) = 0012FE94
我用的是vc2003的编译器。
不知lz用的什么编译器?

&b 应该打印的是 b的地址

static_cast<void *>(b) 是把 b转换成 void *指针,
不知道cout怎么打印void指针的,不过看你说的情况,应该是打印的是a的地址了

转换为vo