7

申し訳ありませんが、ポインターや配列などに関する質問が無数にあることは承知していますが、これは基本的なことですが、答えを指し示すもの (ハハ!) を見つけることができないようです。

メモリのチャンクを指すように初期化されたポインタがあります。配列と同じようにこのメモリにアクセスできることを理解しています。

char *mMem=new char[5000];
cout<<mMem[5]<<endl;

実際には次のとおりです。

char *mMem=new char[5000];
cout<<*(mMem+5)<<endl;

私が理解していないのは、要素のアドレスを取得する方法です-mMemが配列ではないことを考えると、要素がまったく正しい言葉ではないことは承知しています-それは私の理解が正しい場合です。ポインタと配列に関しては、すべてのサイトが好きな言葉を使用しているように見えるからです。だから、もし私が持っているなら:

char *mMem=new char[5000];
cout<<mMem[5]<<endl;
    or
cout<<*(mMem+5)<<endl;

オペレーターのアドレスが正しく機能しないのはなぜですか:

cout<<&mMem[5]<<endl;

5 番目の要素のアドレスを取得する代わりに、その要素以降のメモリ ブロックの内容を出力します。では、なぜ演算子のアドレスが期待どおりに機能しなかったのでしょうか? また、メモリの要素のアドレスを取得するにはどうすればよいでしょうか?

4

2 に答える 2

14

&mMem[5] 5 番目の要素のアドレスですそこからメモリのプリントアウトを取得する理由は、タイプが&mMem[5]ischar*であるためですが、レガシー C の文字列も ofchar*であるため、<<オペレーターは単にそこから文字列を出力したいと考えています。void*印刷する前にポインターを a にキャストしてみます。

cout << static_cast<void*>(&mMem[5]) << endl;

ちなみに、&mMem[5]mMem+5は同じです。

于 2011-07-22T08:18:37.710 に答える
4

期待どおりに要素 5 のアドレスを取得していますが、couta の出力機能char *は、ポインター値ではなく、そのメモリ位置にある文字列の内容を出力することです。

ポインターを int: にキャストするcout << (int)&mMem[5];と、アドレスが出力されます。

于 2011-07-22T08:18:41.373 に答える