在以下情况下reinterpret_cast如何工作

问题描述

我是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个字节将是未定义的,因此会产生垃圾。

因此,至少您不知道如何在内部表示不同的数据类型,以及因此编译器如何根据标准进行数据布局。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...