无法理解 write() 的第一个参数

Cannot understand the first argument of write()

本文关键字:第一个 参数 write      更新时间:2023-10-16

我遇到了这样的说法:

outbal.write( (char*) &acc , sizeof( struct status ) );

outbalofstream的对象,status是一个类型。

因此:

struct status {
  // code
};
status acc;

谈到第二行我不明白第一个论点,这是(char*) &acc.我们在做什么以及如何做?

(char*)&acc如果变量的地址acc,则转换为字符指针以便与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----->>

您正在获取 acc 的地址并将其强制转换为 char* ,这是 ostream::write 成员函数所期望的。

简而言之,您正在将结构的内存中表示形式按原样写入流。

(char*) &acc获取结构acc的地址(即指向acc的指针(,然后将其转换为指向char的指针。

这只是获取acc的地址并将其转换为指向char的指针。

最有可能的是,.write()方法只是盲目地按原样写入给定数量的字节。 char是一种方便的类型,因为(在大多数平台上(它的大小正好是一个字节。所以你给它传递一个指向你想要写出的数据的指针,告诉它,"假装这是一个指向char的指针"。