无法理解 write() 的第一个参数
Cannot understand the first argument of write()
我遇到了这样的说法:
outbal.write( (char*) &acc , sizeof( struct status ) );
outbal
是ofstream
的对象,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
的指针"。
相关文章:
- C++部分概念 id:显式模板规范顺序/第一个参数的特殊状态的原因是什么?
- 可变参数模板作为第一个参数
- 如何从第一个参数推断第二个参数类型?
- 候选构造函数(隐式复制构造函数)不可行:第一个参数需要 l 值
- 为什么 std::error_code 构造函数的第一个参数固定为 int
- 如何通过 std::apply 调用具有定义的第一个参数的可变参数模板函数?
- 如何获取指向 qsort 第一个参数的向量中第一项的指针?
- 如何在 Lua 回调中检测可选的第一个参数
- 如何让我的 strchr 函数同时将'const char'数组和'char'数组作为第一个参数?
- 在第一个参数上部分专用化模板
- 模板的C 功能将第一个参数设置为第二个参数为默认参数
- 如何获取指向函数第一个参数的指针
- 我可以使用use_lazy_terminal对获得3个参数懒惰的终端的第一个参数
- C++比较运算符重载中第一个参数为 null 时出现分段错误
- Cc 套接字编程 select() 的第一个参数
- 重载运算符:第一个参数对应左操作数,第二个参数对应右操作数
- 仅初始化c++11元组的第一个参数
- 我可以使用成员函数作为EnumWindows的第一个参数吗
- gdb只接受第一个参数
- 等键在 boost::unordered_multimap 中起作用:查询键是否保证是第一个参数