0

のアドレスを に割り当てようとしていますが、std::vector<char>いくつchar*か問題があります。

コード:

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、奇妙な出力が得られることに気付くでしょう。char*これは、 a が 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 に答える