如何解决如何获取指向原始数据的 std::vector 指针??

&something给你std::vector对象的地址,而不是它持有的数据的地址。&something.begin()给你返回的迭代器的地址begin()(正如编译器警告的那样,这在技术上是不允许的,因为something.begin()它是一个右值表达式,所以它的地址不能被取走)。

假设容器中至少有一个元素,则需要获取容器初始元素的地址,可以通过

  • &something[0]&something.front()(索引 0 处元素的地址),或

  • &*something.begin()(返回的迭代器指向的元素的地址begin())。

在 C++11 中,一个新的成员函数添加std::vector:data()。该成员函数返回容器中初始元素的地址,就像&something.front(). 这个成员函数的好处是即使容器是空的也可以调用它。

解决方法

我正在尝试std::vector用作char数组。

我的函数接受一个 void 指针:

void process_data(const void *data);

在我只是使用此代码之前:

char something[] = "my data here";
process_data(something);

哪个按预期工作。

但是现在我需要 的动态性std::vector,所以我尝试了以下代码:

vector<char> something;
*cut*
process_data(something);

问题是,如何将 char 向量传递给我的函数,以便我可以访问向量原始数据(无论它是哪种格式——浮点数等)?

我试过这个:

process_data(&something);

和这个:

process_data(&something.begin());

但是它返回了一个指向乱码数据的指针,后者给出了警告:warning C4238: nonstandard extension used : class
rvalue used as lvalue
.