のアドレスを に割り当てようとしていますが、std::vector<char>
いくつchar*
か問題があります。
コード:
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
、奇妙な出力が得られることに気付くでしょう。char*
これは、 a が C スタイルの文字列であることを期待しているためです。住所を印刷したい場合は、次のようにします。
std::cout << static_cast<void*>(p) << std::endl;
あなたが言うように、ベクトル内のデータを変更することだけが必要な場合は、最初の要素を次のように設定して、次のようにするだけです'a'
。
MyVct[0] = 'a';
代わりに のアドレスがvector
必要な場合は、次のものが必要です。
std::vector<char>* p = &MyVct;