1

したがって、ターゲット プラットフォームが 32 ビットの場合、Visual Studio 2005 で完全にコンパイルされるこの既存のコードがあります。ただし、64 ビットでは動作しません。理由がわかりません。実際、ずっと前にポインターがキャストされるのを見たことがありません。それは正しいC ++ですか?

#define REAL double
typedef REAL* point; 
point *ptary; //(so it's basically double** ptary?)
long arylen = (long) ptary[0]; 

前もって感謝します。

4

1 に答える 1

7

ポインタとロングは両方とも32ビット幅であるため、32ビットシステムで動作するように見えます。ポインタは64ビット幅であるため、64ビットシステムでは機能しませんが、longは(おそらく)32ビット幅しかありません。

sizeof(double*)とを印刷することで簡単に確認できますsizeof(long)。私の推測では、64ビットシステムでは出力はそれぞれ8と4になります。

ポインタを保持できる整数型が必要な場合は、intptr_tfromを使用して<stdint.h>ください。

于 2012-07-12T10:16:50.083 に答える