我是一个新的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中似乎发生了这种情况。 请帮助我理解这一点。 提前谢谢你。
在了解更多信息之前,您不应该使用任何*_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个字节将是未定义的,因此您将得到垃圾。
因此,您至少忽略了不同的数据类型在内部是如何表示的,因此也忽略了编译器是如何根据标准制定数据布局的。