※ ChatGPTを利用し、要約された質問です(原文:ポインタ変数のサイズ)
このQ&Aのポイント
C言語におけるポインタ変数のサイズについて調査しました。
実行結果から、char型へのポインタとint型へのポインタのサイズは共に4バイトであることが分かりました。
また、ポインタ変数の初期値についても調査しました。char型へのポインタの初期値は-60であることが分かりました。
いろいろC言語のことを知りたくて、次のソースを作って動かしてみました。
★ソース(□はタブ)
◆◆◆◆◆
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
□char *s1;
□int *s2;
□
□s1 = (char *)malloc(1000);
□s2 = (int *)malloc(1000);
□
□printf("sizeof s1 = %d\n", sizeof s1);
□printf("sizeof s2 = %d\n", sizeof s2);
□
□printf("sizeof *s1 = %d\n", sizeof *s1);
□printf("sizeof *s2 = %d\n", sizeof *s2);
□
□printf("s1 = %d\n", s1);
□printf("s2 = %d\n", s2);
□
□printf("*s1 = %d\n", *s1);
□printf("*s2 = %d\n", *s2);
□
□return EXIT_SUCCESS;
}
◆◆◆◆◆
★実行結果1
◆◆◆◆◆
sizeof s1 = 4
sizeof s2 = 4
sizeof *s1 = 1
sizeof *s2 = 4
s1 = 1323000
s2 = 1324008
*s1 = -60
*s2 = 1310916
◆◆◆◆◆
★実行結果2
◆◆◆◆◆
sizeof s1 = 4
sizeof s2 = 4
sizeof *s1 = 1
sizeof *s2 = 4
s1 = 11087864
s2 = 11088872
*s1 = -60
*s2 = 11075780
◆◆◆◆◆
★実行結果3
◆◆◆◆◆
sizeof s1 = 4
sizeof s2 = 4
sizeof *s1 = 1
sizeof *s2 = 4
s1 = 1519608
s2 = 1520616
*s1 = -60
*s2 = 1507524
◆◆◆◆◆
OSはWindows Vista、コンパイラはMS Visual Studio 2010 コマンドプロンプトです。次の疑問についてご教授頂きたく、お願い致します。
(1)“sizeof s1”、“sizeof s2”の値が共に4となるのはなぜか。
char型へのポインタ、int型へのポインタとして宣言したs1、s2のサイズが同じ4になる理由が、どうしても分かりません。
(動かす前の予想は、でたらめな値になるかと思っていましたが)
(2)“s1”、“s2”、“*s2”の値が毎回でたらめな値になったのに対して、“*s1”の値が毎回“-60”になったのはなぜか。
ポインタでつまずいており、いろいろ実験して体で理解したいと思っています。どうぞよしくお願い致します。
お礼
xpd154様、誠にありがとうございます。非常に明快に、また丁寧にご教授くださいました。大変感謝いたします。よく勉強します。ありがとうございました。