質問: C言語を勉強しています。 ポインタの勉強の中でポインタのサイズを表示させるコードを作って実行したところ、int型が8byteと表示されす。 int型は4byteと表示されるはずなのでなぜこうなるのかわかりません。 ご教示お願いいます。 なお、環境は、Virtualbox上のcenntos、コンパイルにはgccを使っています。 ``` //コード int main(int argc, char const *argv[]) { short int *p ; printf("%d\n",sizeof(p)); return 0; } //コンパイル&実行 >gcc -o pointer pointer.c >./pointer 8
回答: こんにちは。 ポインタ型は、ポインタが指す先のアドレスです。 従って、そのサイズは、メモリ・アドレスを記録するために必要なバイト数となります。 例えば、下記プログラムがあったとしてます ``` int main() { int aData=100; int* aPointer=&aData; : return 0; } ``` これをx86系のCPUのlinuxのgccで64ビットでビルドすると、下記のようなメモリ・イメージになります。 !イメージ説明 x86系のCPUはリトルエンディアンですので、低い方のバイトがアドレスの若い方に保存されます。 なお、アドレスは走らせる度に異なります。 また、ポインタのサイズやint型のサイズはコンパイラによって異なりますのでご注意下さい。