我看到了声明:
outbal.write( (char*) &acc , sizeof( struct status ) );
outbal
是ofstream
的对象,status
是一种类型。
因此:
struct status {
// code
};
status acc;
谈到第二行我不理解第一个论点,即(char*) &acc
。我们在做什么以及如何做?
答案 0 :(得分:2)
(char*)&acc
如果变量acc
的地址,则转换为char指针以便与ostream::write()
兼容。正是这个变量被写入outbal
流,其长度为sizeof(struct status)
。
ostream::write
获取内存地址和长度,并将该内存输出到指定的流。换句话说,您只是输出acc
变量的整个内存内容。
您的代码类似于:
struct xyz {int a; float b; void *c};
ostream os("myfile.dat");
struct xyz abc; // 'struct' not technically needed in C++
os.write ( (char *)abc, sizeof (struct xyz));
// <<-memory addr->> <<-----size----->>
答案 1 :(得分:1)
您正在使用acc
的地址并将其转换为char*
,这是ostream::write
成员函数所期望的内容。
简而言之,您正在将结构的内存中表示形式写入流中。
答案 2 :(得分:0)
(char*) &acc
获取结构acc
的地址(即指向acc
的指针),然后将其转换为指向char
的指针。
答案 3 :(得分:0)
这只是取acc
的地址并将其转换为指向char
的指针。
很可能.write()
方法只是盲目地按原样盲写一定量的字节。 char
是一种用于此目的的convienent类型,因为(在大多数平台上)它只有一个字节大小。所以你传递一个指向你想要写出的数据的指针,告诉它,“假装这是指向char
的指针。”