2012-01-11 19 views
2

私はコンソールに要素のアドレスを入れたいが、それに問題がある。配列要素のアドレスを取得する方法は?

cout << &text[0] << endl;

それは出力そのvauleあるようですが、私はここで間違って何をやっていますか?あなたは入出力ストリームと印刷のためvoid *に変換する必要があり、そしてあなたは安全なアドレス演算子オーバーロードさ& -operatorsによって混乱しない必要

おかげ

+2

printfの使用するstdio.hを必要とするも、text' 'の定義を表示します。 – unwind

+0

定義を表示することが何を意味するのかわからないのですか? LOL申し訳ありません – nullVoid

+0

@nullVoid 'text'が変数 – JaredPar

答えて

9

。言い換えれば:

std::cout << static_cast<void*>(std::addressof(text[0])) << std::endl; 

あなたは<memory><iostream>だけでなく、最近のコンパイラが必要です。


アップデート:このコードはあなたのオペランドの静的アドレスを与えること注意。ポリモーフィックオブジェクトの基本参照を渡す場合は、dynamic_cast<void*>(x)を代わりに使用する必要がありますが、これは多相オブジェクト(つまり仮想関数を持つオブジェクト)の場合はのみであり、実際の動的オブジェクトのアドレスが得られます。

+0

キャストは必要ですか? –

+0

+1、iostreamに 'void *'キャストが必要なのはなぜですか? – JaredPar

+0

@ Jared:iostreamsには、 'char *'のようなもののオーバーロードがあります。私たちはそれらを望んでいないだろうか? –

0

はちょうどこのようにそれを実行します。

printf("%p",text); 

あなたは

関連する問題