0

我正在尝试将地址分配std::vector<char>到 achar*并遇到一些问题。

代码

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

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

4

2 回答 2

1

似乎您想要的是内部元素的地址,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!
于 2012-12-05T11:50:05.933 回答
0

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;
于 2012-12-05T11:49:52.563 回答