• ベストアンサー

ポインタのsizeofについて

C初心者です。 ポインタ宣言させた変数をsizeof()で値を取得させて 表示させてみました。 char *cp; short int *sp; int *ip; i = sizeof(cp); printf("%d\n",i); i = sizeof(sp); printf("%d\n",i); i = sizeof(ip); printf("%d\n",i); 結果は全て4となりました。 これはなぜですか? (ただの変数として宣言すれば1、2、4となります。この理由も理解できています。)

質問者が選んだベストアンサー

  • ベストアンサー
  • yuu_yuu
  • ベストアンサー率41% (34/81)
回答No.3

ポインターはアドレス(コンピュータのメモリの番地)を格納する領域です。 よって、charのアドレスもlongのアドレスも32ビット必要となります。 >>仮に2バイトでアドレス管理している場合はポインタのsizeofはすべて2になるということでよいでしょうか? その通り!! そうなりますが実際2バイトでアドレスを管理している、CPUはありません。 そのかわり、最近ではロングポインタ(64ビット)でアドレス管理できるものも出てきています。 搭載できるメモリの量が増えてきて、32ビットでは足りなくなってきていますから。

bad_star
質問者

お礼

なるほど。 理解できました。 ありがとうございます。

その他の回答 (2)

  • wolf03
  • ベストアンサー率22% (241/1086)
回答No.2

ポインタはアドレスを格納する変数です。 処理系のアドレッシングが32bitならば4byteとなり、質問通りの結果となります。 ポインタがどのような物かを再度勉強した方がよいですね。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

お使いの処理系では、ポインタ変数の値(何かの変数のアドレス)を 格納するためには4バイトの領域が必要である、ということです。

bad_star
質問者

補足

処理系依存ということですか? 仮に2バイトでアドレス管理している場合はポインタのsizeofはすべて2になるということでよいでしょうか?

関連するQ&A