我正在尝试将地址分配std::vector<char>
到 achar*
并遇到一些问题。
代码:
void GGG:foo(std::vector<char>& MyVct)
{
char* p = &MyVct[0];
}
但我没有得到地址。如何获取地址并将其转换为 char* ?
似乎您想要的是内部元素的地址,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
,你会发现它会给你一些奇怪的输出。那是因为它期望 achar*
是 C 风格的字符串。如果要打印地址,请执行以下操作:
std::cout << static_cast<void*>(p) << std::endl;
如您所说,如果您只想修改向量中的数据,则只需执行以下操作,将第一个元素设置为'a'
:
MyVct[0] = 'a';
相反,如果您想要 的地址,则vector
需要:
std::vector<char>* p = &MyVct;