私はコンソールに要素のアドレスを入れたいが、それに問題がある。配列要素のアドレスを取得する方法は?
cout << &text[0] << endl;
それは出力そのvauleあるようですが、私はここで間違って何をやっていますか?あなたは入出力ストリームと印刷のためvoid *
に変換する必要があり、そしてあなたは安全なアドレス演算子オーバーロードさ&
-operatorsによって混乱しない必要
おかげ
私はコンソールに要素のアドレスを入れたいが、それに問題がある。配列要素のアドレスを取得する方法は?
cout << &text[0] << endl;
それは出力そのvauleあるようですが、私はここで間違って何をやっていますか?あなたは入出力ストリームと印刷のためvoid *
に変換する必要があり、そしてあなたは安全なアドレス演算子オーバーロードさ&
-operatorsによって混乱しない必要
おかげ
。言い換えれば:
std::cout << static_cast<void*>(std::addressof(text[0])) << std::endl;
あなたは<memory>
と<iostream>
だけでなく、最近のコンパイラが必要です。
アップデート:このコードはあなたのオペランドの静的アドレスを与えること注意。ポリモーフィックオブジェクトの基本参照を渡す場合は、dynamic_cast<void*>(x)
を代わりに使用する必要がありますが、これは多相オブジェクト(つまり仮想関数を持つオブジェクト)の場合はのみであり、実際の動的オブジェクトのアドレスが得られます。
キャストは必要ですか? –
+1、iostreamに 'void *'キャストが必要なのはなぜですか? – JaredPar
@ Jared:iostreamsには、 'char *'のようなもののオーバーロードがあります。私たちはそれらを望んでいないだろうか? –
はちょうどこのようにそれを実行します。
printf("%p",text);
あなたは
printfの使用する
stdio.h
を必要とするも、text' 'の定義を表示します。 – unwind定義を表示することが何を意味するのかわからないのですか? LOL申し訳ありません – nullVoid
@nullVoid 'text'が変数 – JaredPar