用c++编写的涉及指针的程序

A program in C++ involving pointers

本文关键字:指针 程序 c++      更新时间:2023-10-16

我看不懂这个程序的输出:

void main(){
    double d=3.1416;
    char ch=*(char*)&d;
    cout<<ch;
    }

输出:2

注:2的尺寸比通常的2小得多。

你能解释一下第三行的意思吗?谢谢你。

在你的语句中:

char ch=*(char*)&d;  

您正在执行以下操作:
1. 获取变量的地址或位置。
2. 创建一个字符类型的指针指向变量。
3.解引用(将变量的第一个位置转换为字符类型)(尚未发生转换)。
4. 将d的第一个内存位置分配给字符类型变量(尚未进行转换)。

然后打印ch中的值。

如果ch中的值是可打印的值,那么您很幸运;然而,我怀疑它是否有意义。否则,你就看不见了。

如果要从内部表示转换为文本表示,请使用:

cout << d;

我强烈建议在此代码上使用调试器并查看变量d的内存位置。获取该值并查看其是否可打印。

编辑1:
第4行打印的值取决于值3.1416在内存中的存储方式。

因为它是一个浮点变量,我们可以猜到它被分为:符号、尾数和指数。最大的问题是,有多少比特是专门用于这三个群体的。通常,1位是符号。其他的依赖于你的平台。如果您的平台上的char类型是8位,并且顺序是尾数,指数,然后是符号,那么您的字符将是尾数的前8位,这可能不是可打印的字符。