从二进制流读取时,将 double 变量的地址转换为 char* 意味着什么?

but*_*ife 2 c++

我有以下来自在线 C++ 课程的代码:

class tempStat
{
    public:
    // Data members.
    double minimum, maximum;

    // Constructor.
    tempStat(double min = 0.0, double max = 0.0)
        : minimum(min), maximum(max)
    {}

    // Helper method, to write a tempStat object to a file in binary format.
    void write(std::ostream & os)
    {
        os.write((char*)&minimum, sizeof(double));
        os.write((char*)&maximum, sizeof(double));
    }

    // Helper method, to read a tempStat object from a file in binary format.
    void read(std::istream & is)
    {
        is.read((char*)&minimum, sizeof(double));
        is.read((char*)&maximum, sizeof(double));
    }
}
Run Code Online (Sandbox Code Playgroud)

这个类是这样使用的:

tempStat ts;
ts.read(ifile);
Run Code Online (Sandbox Code Playgroud)

我的问题是,我们如何将内存地址 ( &minimum) 转换为指向 a 的指针char

其次,如果minimum有是一个int,想必大家会写了相同的代码(至少,据(char*)&minimum),所以它的工作原理是&someIntVariable可以被转换为char*

Lig*_*ica 7

流中的信息以字节序列的形式呈现char

您想将该信息读入变量minimumand 中maximum,它们是doubles。

您假设您正在读取的字节构成了double系统上a 的有效字节表示。

您将doubles “别名”为一个字节序列(这在标准中作为特殊规则是允许的;通常您不能假装是别的东西),然后将结果提供char*给流的“读取”函数。

流的“读取”函数认为它被要求将数据放入 的数组中char,因为这就是 a 的char*样子,并且因为这就是函数的设计目的。

因此,字节序列由“读取”函数复制到您的doubles 中。


write功能也是一样。我们假装我们正在给它的字节序列(流char来写阵列),而我们是可以做到这一点,因为这是从根本上什么double ,这一切的下面。


其次,如果 minimum 是 int,大概我们会编写相同的代码(至少,就 (char*)&minimum 而言),那么 &someIntVariable 也可以转换为 char* 是如何工作的?

因为 anint也由字节序列表示。

每个对象都是。