这段代码做什么&

时间:2014-12-19 19:03:29

标签: c++

#include <iostream>
#include <string>
typedef unsigned long long  ul64;
double m[10] = { 65.45433, 45435.0054, 232543535.9, 0.00043543, 99.99999, 5345434.000, 754354.6, 80008.243, 0.9, 10.01 };
union foo
{
    char cs[8];
    double x;
    ul64 a;
    foo(std::string s) { for (int i = 0; i < s.size(); i++) cs[i] = s[i];}
    foo(double y) :x(y){}
    foo(ul64 b) :a(b){}
};
int main()
{
    foo bar(0xe8e711395e65686d);
    for (int i = 1; i <= 10; i++)
        bar.x *= m[i];
    for (int i = 1; i <= 8; i++)
        std::cout << bar.cs[i];
    std::cout << std::endl;
    return 0;
}

我的考试有这段代码,但我不知道自己在做什么。请帮帮我!我只知道它有一些错误并显示出来。

1 个答案:

答案 0 :(得分:0)

也许这只会压倒你。

首先从第一行开始:

是什么
    foo bar(0xe8e711395e65686d);

做什么?它创建一个名为bar的变量,其类型为foo,并使用参数0xe8e711395e65686d调用构造函数。那这是做什么的呢?

阅读Mooing Duck的评论:它打算做什么,以及如何解决它以便它能够做它想要做的事情?

你有两个for循环:

for (int i = 1; i <= 10; i++)
for (int i = 1; i <= 8; i++)

两者都包含同样的初学者错误。这是什么错误?修理它。

最后在输出循环中,您需要了解联合是什么。代码很奇怪,但你仍然可以解释它的作用。