<ポインタ変数のサイズ>
すべての変数には、そのデータ型に応じて決まったサイズのメモリが割り当てられます。すでに学んだように、char型は1バイト、short型は2バイト、long型は4バイト、などという具合です。
ポインタも変数です。ではポインタ変数には何バイトのメモリが割り当てられるのでしょうか?「char型のポインタ」「long型のポインタ」など、その型によってサイズが異なるのでしょうか?
ポインタ変数のサイズもsizeofで得られますから、以下のようなプログラムが可能です。
<例>
#include
<stdio.h>
int main(void)
{
int
n; /*
nはint型変数 */
int
*ip; /*
ipはint型のポインタ変数 */
double
x; /*
xはdouble型変数 */
double
*dp; /* dpはdouble型のポインタ変数 */
/*
それぞれの変数のメモリサイズを表示 */
printf("size
of int
: %d\n", sizeof(int));
printf("size
of (int *) : %d\n",
sizeof(int *));
printf("size
of double :
%d\n", sizeof(double));
printf("size
of (double *): %d\n", sizeof(double *));
return
0;
}
(実行結果の例)
size of
int
: 4
size of (int
*) : 4
size of
double : 8
size of
(double *): 4
実行結果から、ポインタ変数はその型によらず4バイトであることが分かります。<例4−1>などの実行結果から分かりますが、アドレスの値は0xbffffaa0というように32ビット(16進数一桁で4ビット)の数値で表されます(処理系により異なります)。従って、その値を保持するための変数であるポインタも32ビット(=4バイト)あればよいことになります。