gpt4 book ai didi

传递参数的c++内存初始化

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:28:26 32 4
gpt4 key购买 nike

我正在编写一个 C++ 程序。我正在解析一个文件并初始化一个结构。我有一个要初始化的数组,但我必须从文件中读取数组的大小。我想在一个函数中读取数组长度和初始化数组。如果我将数组指针传递给另一个函数并做一个新的,当函数返回时,指针被销毁,我看不到初始化值。这是预期的还是我错过了什么。我该如何克服这个问题?

最佳答案

您可以通过忘记有关手动数组、原始指针传递*和new 的一切来克服这个问题。这是 C++,而不是 1991。因此,典型的解决方案可能是这样的:

#include <vector>
#include <cstdint>
#include <istream>

std::vector<uint32_t> read_data(std::istream & is)
{
uint32_t len;
is.read(reinterpret_cast<char*>(&len), sizeof(uint32_t));

std::vector<uint32_t> result(len);
for (uint32_t i = 0; i != len; ++i)
{
is.read(reinterpret_cast<char*>(&result[i]), sizeof(uint32_t));
}

return result;
}

(在高质量代码中,read 命令将被条件包围,错误将被处理,可能通过抛出异常来处理。)

后来:

#include "int_reader.hpp"
#include <fstream>
#include <iostream>

int main()
{
std::ifstream infile("thedata.bin", std::ios::binary);
std::vector<uint32_t> data = read_data(infile);

std::cout << "We read " << data.size() << " integers.\n";
}

*) 唯一在通用 C++ 中占有一席之地的原始指针是用于 I/O 操作的 char*,如此代码所示。 C++ 将 char 定义为机器的基本数据单元类型,I/O 以 char 为单位发生。

关于传递参数的c++内存初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8232238/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com