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

C++ 无法理解write()的第一个参数,c++,visual-c++,io,C++,Visual C++,Io,我看到了这样的声明: outbal.write( (char*) &acc , sizeof( struct status ) ); outbal是stream的对象,status是一种类型 因此: struct status { // code }; status acc; 谈到第二行,我不理解第一个参数,即(char*)&acc。我们正在做什么以及如何做?您正在获取acc的地址并将其转换为char*,这正是ostream::write成员函数所期望的 简而言之,您正在将结构

我看到了这样的声明:

outbal.write( (char*) &acc , sizeof( struct status ) );
outbal
是stream的
对象,
status
是一种类型

因此:

struct status {
  // code
};

status acc;

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

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


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

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

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

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

(char*)&acc
获取结构的地址
acc
(即指向
acc
)的指针,然后将其强制转换为指向
char
(char*)&acc
的指针,如果变量
acc
的地址强制转换为char指针以便与兼容。正是该变量写入
outbal
流,长度为
sizeof(结构状态)

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----->>
struct xyz{int a;float b;void*c};
ostream操作系统(“myfile.dat”);
在C++中不需要技术上的XYZ abc
写((char*)abc,sizeof(struct xyz));
//           
(char*)&acc
如果变量的地址
acc
,则强制转换为char指针以便与兼容。正是该变量写入
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----->>
struct xyz{int a;float b;void*c};
ostream操作系统(“myfile.dat”);
在C++中不需要技术上的XYZ abc
写((char*)abc,sizeof(struct xyz));
//           

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


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

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


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

强制转换
(char*)
表示什么?@grassPro,它将您的结构地址强制转换为适合
写入
的类型。因此您不需要执行
(char*)&abc
?(符号和符号)需要<代码>和代码>,否则它会将结构本身的内容投射到指针。@ PaxDabLoo:这很好,但我想指出OP,他正在编写C++程序。
indicate?@grassPro,它将您的结构地址强制转换为适合写入的类型。因此您不需要执行
(char*)和abc
?(与符号)“代码”>和“代码”是必需的,否则它会将结构本身的内容投射到一个指针上。@ PaxDabLo:这很好,但是我想指出OP,他正在编写C++程序。Case<代码>(char)< /C> >什么?它意味着重新解释结构的地址(类型:代码>状态*<代码>)作为指向char*的指针。实际上在机器代码级别没有任何事情发生。它只是告诉编译器将一种类型的指针视为另一种类型的指针。强制转换
(char*)
指示什么?它意味着重新解释结构的地址(类型
状态*
)作为一个指向char的指针,在机器代码级别上没有任何实际发生的事情。它只是告诉编译器把一种指针当作另一种指针来对待。听起来你不理解的是一般的转换,而不是这个参数:请查阅C++书籍的那部分。听起来好像你不理解的是CasTi。特别是N个一般而不是这个论点:请参阅C++书籍的那一部分。