C ++中涉及指针的程序

时间:2016-11-02 22:23:30

标签: c++ pointers

我无法理解这个程序的输出:

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

输出:2

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

请解释第3行的含义。 谢谢。

1 个答案:

答案 0 :(得分:1)

在你的陈述中:

char ch=*(char*)&d;  

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

然后,您将在ch

中打印该值

如果ch中的值是可打印的值,那么您很幸运;但是,我怀疑它会有意义。否则,你将无法看到它。

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

cout << d;

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

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

由于它是一个浮点变量,我们可以猜测它分为:符号,尾数和指数。最大的问题是,有多少比特专用于三组。通常,一位是标志。其他人依赖于您的平台。如果平台上的char类型是8位,并且顺序是尾数,指数,然后是符号,则您的字符将是尾数的前8位,这可能不是可打印字符。