<ポインタ変数のサイズ>

 

 すべての変数には、そのデータ型に応じて決まったサイズのメモリが割り当てられます。すでに学んだように、char型は1バイト、short型は2バイト、long型は4バイト、などという具合です。

 

 ポインタも変数です。ではポインタ変数には何バイトのメモリが割り当てられるのでしょうか?「char型のポインタ」「long型のポインタ」など、その型によってサイズが異なるのでしょうか?

 

 ポインタ変数のサイズもsizeofで得られますから、以下のようなプログラムが可能です。

 

<例>

#include <stdio.h>

int main(void) {

         int n;          /* nint型変数 */

         int *ip;        /* ipint型のポインタ変数 */

         double x;       /* xdouble型変数 */

         double *dp;     /* dpdouble型のポインタ変数 */

 

         /* それぞれの変数のメモリサイズを表示 */

         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バイト)あればよいことになります。

 

 

戻る