提问者:小点点

在以下情况下,reinterpret_cast是如何工作的


我是一个新的c++风格编码,我混淆了reinterpret_cast和常规的c风格转换。

代码1:

int a=100;
    char *p =reinterpret_cast<char*>(&a);
    cout << *p;

给出了“D”,我把它理解为asci值,但是下面的代码

代码2:

 char c=10;
    int *p = reinterpret_cast<int *>(&c);
    cout << *p;

给了我一些随机输出。

我认为在代码1中会有数据丢失,因为int被转换为char,但是在代码2中似乎发生了这种情况。 请帮助我理解这一点。 提前谢谢你。


共1个答案

匿名用户

在了解更多信息之前,您不应该使用任何*_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是一个字节的值,这意味着int表示中的其他3个字节将是未定义的,因此您将得到垃圾。

因此,您至少忽略了不同的数据类型在内部是如何表示的,因此也忽略了编译器是如何根据标准制定数据布局的。