【问题标题】:what will be behavior of following code snippet? [duplicate]以下代码片段的行为是什么? [复制]
【发布时间】:2010-08-04 21:07:05
【问题描述】:

如果我不小心在 C/C++ 中这样编码,以下代码的行为和输出会是什么,

float a = 12.5;
printf("%d\n", a);
printf("%d\n", *(int *)&a);

【问题讨论】:

  • 两个字:未定义的行为
  • 好奇的点是有意地尝试一下,看看会发生什么:)
  • @Nikolai:但在多个平台上尝试(最好使用不同的字节序或不同的 sizeof(int))
  • @Nikolai 但是如果他尝试它会发生什么,它的信息量不是很大,这就是 UB 的方式。不过,我同意你的观点——有时我认为我是 SO 上唯一真正拥有编译器的人。
  • @Prabhu,我怀疑这是某人的说法,他们认为这个问题是无稽之谈。它不是来自我。

标签: c++ c pointers floating-point


【解决方案1】:

垃圾,越来越垃圾。

如果你做了以下事情,你会得到一些有意义的东西

 printf("%d\n", (int)a);

【讨论】:

  • +1 表示无意的幽默。 :-)
  • @Paul R:你怎么知道这是无意的?不是说你不介意。
  • @torak:如果是故意的,我深表歉意——我认为这可能只是一个错字,碰巧非常有趣和恰当。 :-)
  • @Paul R:不,这不是故意的。事实上,我很感谢你让我自己开个玩笑。 :)
  • @torak:很酷 - 我可能会在以后偷你的笑话。 ;-)
【解决方案2】:

未定义,因为 ANSI 未定义 sizeof(int) 和 sizeof(float) 之间的关系。

【讨论】:

    猜你喜欢
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 2021-02-18
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多