我有以下来自在线 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*?
流中的信息以字节序列的形式呈现char。
您想将该信息读入变量minimumand 中maximum,它们是doubles。
您假设您正在读取的字节构成了double系统上a 的有效字节表示。
您将doubles “别名”为一个字节序列(这在标准中作为特殊规则是允许的;通常您不能假装是别的东西),然后将结果提供char*给流的“读取”函数。
流的“读取”函数认为它被要求将数据放入 的数组中char,因为这就是 a 的char*样子,并且因为这就是函数的设计目的。
因此,字节序列由“读取”函数复制到您的doubles 中。
write功能也是一样。我们假装我们正在给它的字节序列(流char来写阵列),而我们是可以做到这一点,因为这是从根本上什么double 是,这一切的下面。
其次,如果 minimum 是 int,大概我们会编写相同的代码(至少,就 (char*)&minimum 而言),那么 &someIntVariable 也可以转换为 char* 是如何工作的?
因为 anint也由字节序列表示。
每个对象都是。