0

ANSI CI では、次のことができます。

const long *address = 0x00000002;  /* Example address */
printf("0x00000002 -> %ld", *address);

コンソールには、そのメモリ アドレスの内容が表示されます。しかし、VC++ のそのコードは次をスローします。

エラー C2440: '初期化中': 'int' から 'const long *' に変換できません

VC++ からメモリ アドレスを読み取るネイティブな方法はありますか、それとも API を呼び出す必要がありますか?

前もって感謝します。

4

2 に答える 2

4

アドレスは整数で表されます。適切な型のポインターにキャストする必要があります。

const long *address = reinterpret_cast<const long *>(0x00000002);

そして、そのキャストを標準 C++ で実行する必要があります。標準 C++ でキャストを省略できると考える理由がわかりません。

もちろん、コードを実行すると、セグメンテーション違反が発生します。

于 2013-11-07T20:49:37.900 に答える
3

そのアドレスを設定するには、次のようなキャストを使用します

const long* address = (const long*) 0x0000002;  // C style

また

const long* address = 
   reinterpret_cast<const long*>(0x000002); // C++ style

ところで、ほとんどのシステムでは、0x0000002 は有効なアドレスではありません (アプリケーションの通常の仮想アドレス空間では)。仮想メモリ仮想アドレス空間のウィキページを参照してください。

于 2013-11-07T20:50:26.493 に答える