- ベストアンサー
ポインタの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となります。この理由も理解できています。)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ポインターはアドレス(コンピュータのメモリの番地)を格納する領域です。 よって、charのアドレスもlongのアドレスも32ビット必要となります。 >>仮に2バイトでアドレス管理している場合はポインタのsizeofはすべて2になるということでよいでしょうか? その通り!! そうなりますが実際2バイトでアドレスを管理している、CPUはありません。 そのかわり、最近ではロングポインタ(64ビット)でアドレス管理できるものも出てきています。 搭載できるメモリの量が増えてきて、32ビットでは足りなくなってきていますから。
その他の回答 (2)
- wolf03
- ベストアンサー率22% (241/1086)
ポインタはアドレスを格納する変数です。 処理系のアドレッシングが32bitならば4byteとなり、質問通りの結果となります。 ポインタがどのような物かを再度勉強した方がよいですね。
- asuncion
- ベストアンサー率33% (2127/6289)
お使いの処理系では、ポインタ変数の値(何かの変数のアドレス)を 格納するためには4バイトの領域が必要である、ということです。
補足
処理系依存ということですか? 仮に2バイトでアドレス管理している場合はポインタのsizeofはすべて2になるということでよいでしょうか?
お礼
なるほど。 理解できました。 ありがとうございます。