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

时间:2011-06-29 11:58:06

标签: c++ visual-c++ io

我看到了声明:

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

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

因此:

struct status {
  // code
};

status acc;

谈到第二行我不理解第一个论点,即(char*) &acc。我们在做什么以及如何做?

4 个答案:

答案 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的指针。”