2

重複の可能性:
C++ の 64 ビット コンピューターのポインター サイズは?

私は大学で C を勉強しています。

Windows 7/8 でプログラミング環境を構築しようとしたのですが、問題が発生しました。

このコード:

int main()
  int *p;
  printf("%d",sizeof(p));
  return 0;
}

8 ではなく 4 を印刷します (8 は大学で印刷されます)。私に何ができる?

私の Windows は 64 ビットおよび x64 プロセッサです。

4

2 に答える 2

5

おそらく、コードを32ビットアプリケーションにコンパイルします。64ビットアプリケーションとしてコンパイルする必要があります。コンパイラの設定を確認してください。OSが64ビットであるかどうかは関係ありません。

于 2012-11-12T12:22:33.203 に答える
1

ここでの「問題」は、コンパイル アーキテクチャに依存する結果です。

C の基本型 ( intdouble、 などchar) には事前定義されたサイズがありません。どのサイズをどの型に使用するかはコンパイラ次第です。

ポインターに関しては、通常、マシンで使用可能な任意のメモリ位置をアドレス指定できるようにする必要があります。32 ビット アーキテクチャでは、アドレス範囲は 2^32 です。ポインタは、メモリが配置されているアドレスを参照する数値にすぎないため、2^32 アドレス (つまり、4 バイトの範囲) が適切です。

64 ビット システムの場合、すべてのメモリをアドレス指定するには、2^64 (つまり 8 バイト) の範囲が必要です。

したがって、ポインタのサイズはシステム アーキテクチャに依存する必要があります。

心に留めておいてください:すべてのポインタ型(それであろうとint*, char*, double*何であろうと)は同じサイズです!そのため、32 ビットで整数と整数ポインタを使用すると、intほとんどのアーキテクチャでも 4 バイトのサイズがあるため、少し混乱する可能性があります。

于 2012-11-12T13:29:45.377 に答える