【问题标题】:A program in C++ involving pointers涉及指针的 C++ 程序
【发布时间】:2016-11-02 22:23:30
【问题描述】:

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

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

输出:2

注意:2 比通常的 2 小很多。

你能解释一下第 3 行的含义吗? 谢谢。

【问题讨论】:

  • 你的注释是什么意思?您是否尝试过自己理解这一点?
  • 打印指针地址使用cout&lt;&lt;(void*)ch;。不过,从这种情况来看,这条线毫无意义。
  • 你的意思是你看到的2是上标2吗?
  • 你不能通过随机挑选一些你不理解的代码并要求互联网上的人解释它们来学习C++。您需要将自己应用于从一开始就解释一切的课程或书籍。推荐书籍:stackoverflow.com/questions/388242/…
  • 是的,2是2的上标。

标签: c++ pointers


【解决方案1】:

在你的声明中:

char ch=*(char*)&d;  

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

然后您将打印ch 中的值。

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

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

cout << d;

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

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

由于它是一个浮点变量,我们可以猜测它分为:符号、尾数和指数。最大的问题是,有多少位专用于这三个组。通常,一位是符号。其他的取决于你的平台。如果你平台上的char类型是8位,顺序是尾数,指数,然后符号,你的字符就是尾数的前8位,可能不是可打印字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 2013-04-25
    • 2022-11-11
    • 1970-01-01
    • 2012-06-23
    相关资源
    最近更新 更多