C++无效指针

C++ void pointer

本文关键字:指针 无效 C++      更新时间:2023-10-16

我正在使用HDF5库从c++中的HDF5文件读取数据,我遇到的问题如下:

status = H5Dread(
    hdf5_dataset,
    hdf5_datatype,
    hdf5_dataspace_in_memory,
    hdf5_dataspace_in_file,
    H5P_DEFAULT,
    buf
);

最后一个参数应该是一个空指针,我有一个浮点向量,我想被分配,但是当我试图传递向量g++时,会出现以下错误:

错误:对于参数‘6’‘herr_t H5Dread(hid_t, hid_t, hid_t, hid_t, hid_t, void*)’ ,无法将‘std::vector<float, std::allocator<float> >’转换为‘void*’

有没有什么方法可以直接写入向量,而不必分配两次内存?

由于std::vector保证数据存储在连续内存中,因此可以将矢量转换为指针,如下所示:

std::vector<float> myFloats;
void *ptr = static_cast<void*>(&myFloats[0]); // or &myFloats.front()

编辑:如果您在不调用push_back的情况下写入,请首先确保resize有足够的空间!

给定一个std::vector<float>,您可以获得一个指向float s的连续缓冲区的指针,因此:

std::vector<float> v;
fillMyVectorSomehow(v);
float* buffer = &v[0]; // <---

您可以将其投射到void*并将其传递出去。