问题描述
我是C ++样式编码的新手,我对reinterpret_cast和常规C样式转换感到困惑。
代码1:
person.pet
给我放出“ d”,我将其理解为asci值,但是下面的代码
代码2:
int a=100;
char *p =reinterpret_cast<char*>(&a);
cout << *p;
给我一些随机输出。
我认为代码1会因为int转换为char而丢失数据,但是似乎代码2中正在发生这种情况。请帮助我理解这一点。预先感谢。
解决方法
在了解更多信息之前,切勿使用任何* _cast。
int a=100;
char *p =reinterpret_cast<char*>(&a);
cout << *p;
int最有可能是一个32位值,表示为0x64,在某些机器上读为ASCII的是'd',而在其他机器上,前缀0的0x00000064使其看起来像0x00(大/小尾数)。
char c=10;
int *p = reinterpret_cast<int *>(&c);
cout << *p;
Char是一个1字节的值,这意味着int表示形式中的其他3个字节将是未定义的,因此会产生垃圾。
因此,至少您不知道如何在内部表示不同的数据类型,以及因此编译器如何根据标准进行数据布局。