小众知识

首页 > 正文

类型转换得到的奇怪的结果,高手帮我解释一下。

类型转换得到的奇怪的结果,高手帮我解释一下。

如下代码:

#include 
#include 
using namespace std;

int main()
{
char* word = "cock";
void* ptr = static_cast(word); //const_cast: passed!!
int* ip = static_cast(ptr); //const_cast: passed!!
cout <
char* cp = reinterpret_cast(ip);
for(int i = 0; i < sizeof(int); i++)
cout <cout <
return 0;
}

我想把4个char变量存放在一个4字节int变量里,然后重新取出。在VC6下的编译运行结果如下:

6b636f63 //in reverse order. ASCII for "kcoc"??
cock
Press any key to continue

1.int类型在内存中是怎么存储的?为什么取得的整数是与原字符串的ASCII码逆序的?
2.我在调试的时候把static_cast误写成了const_cast,竟然也编译通过了,而且运行结果相同!我记得const_cast只能用于去除变量的const或volatile属性而不能同时用于其它的转换。这怎么解释?  

 zoezinsser 发表于:2003-07-23 20:03:38
得分:0 

一般来说,类型转换是不安全的!容易产生内存泄露,内存截断...

int类型数据在内存中是以两字节存储的!(有时也视编译器而定)

char类型数据在内存中是以一字节存储的!


 cniou 发表于:2003-07-23 20:20:21
得分:20 

int类型的存储看CPU的ENDIANNESS,如果是BIGENDIAN的话,高位存放在底字节,低位存放在高字节;LITTLE ENDIAN则反之。
一般PC是LITTLE ENDIAN的,所以你得到的是反序的。 

 chinazcw 发表于:2003-07-23 20:55:16
得分:0 

写成const_cast也能通过??

编译器有问题吧,我的就出错!~ 

上一篇:请问对于一个包含指针数据成员的类如何重载“+”这样的运算符?谢谢
下一篇:C++编译器是否都兼容C

分享到: