获取 STL 向量C++的地址

getting addres of stl vector C++

本文关键字:地址 C++ 向量 STL 获取      更新时间:2023-10-16

我正在尝试将std::vector<char>的地址分配给char*,但遇到了一些问题。

代码

void GGG:foo(std::vector<char>& MyVct)  
{  
      char* p = &MyVct[0];   
}    

但我没有得到地址。如何获取地址并将其转换为字符*?

您似乎想要MyVct内元素的地址,而不是向量本身。
您可以使用vector::data来实现此目的:

char* p = MyVct.data();

编辑:如果你想修改一个矢量的元素,你不必真正得到它的指针。您可以使用 std::vector 提供的可用接口。例如,而不是做:

char *p = MyVct.data(); // or char *p = &MyVct[0];
*p = 'a';

只需做:

MyVct[0] = 'a'; // Use C++ way!

假设有第一个元素,你的代码确实会得到MyVct中第一个元素的地址。在 C++11 中,std::vector 提供了访问基础数据的 data 成员函数:

char* p = MyVct.data();

如果您尝试使用 std::cout << p 打印此地址,您会发现它为您提供了一些奇怪的输出。这是因为它期望char*是 C 样式的字符串。如果要打印地址,请执行以下操作:

std::cout << static_cast<void*>(p) << std::endl;

如果,正如你所说,你想做的只是修改向量中的数据,你只需要做这样的事情,将第一个元素设置为 'a'

MyVct[0] = 'a';

相反,如果您想要vector的地址,则需要:

std::vector<char>* p = &MyVct;