【C言語】ポインタを理解するための第一歩(int型)
C未経験なのにCのプログラム改修をやらされている同僚くん…
そんな彼にポインタの基本をわかってもらうために書いたサンプルです
※このあとchar型のポインタと配列でまた混乱している同僚くん…ガンバ!(^^;;
プログラム
sample.c
#include <stdio.h> int main(void) { int iNum; int *piNum; // コードの表示(実行結果がわかりやすいように。意味はない) printf("\n"); printf("int iNum;\n"); printf("int *piNum;\n"); printf("\n"); // 確認 printf("---------- 確認 ----------\n"); printf("&iNum :%p\n", &iNum); printf("iNum :%d\n", iNum); printf("&piNum:%p\n", &piNum); printf("piNum :%p\n", piNum); printf("*piNum:%d\n",*piNum); // piNumは不定なので危険(コケるかも) printf("--------------------------\n"); // 値を設定 iNum = 555; // アドレスを設定(とりあえず NULL を設定) piNum = NULL; // コードの表示(実行結果がわかりやすいように。意味はない) printf("\n"); printf("iNum = 555;\n"); printf("piNum = NULL;\n"); printf("\n"); // 確認 printf("---------- 確認 ----------\n"); printf("&iNum :%p\n", &iNum); printf("iNum :%d\n", iNum); printf("&piNum:%p\n", &piNum); printf("piNum :%p\n", piNum); // printf("*piNum:%d\n",*piNum); // piNumはNULLなのでコケる printf("--------------------------\n"); // アドレスを設定 piNum = &iNum; // コードの表示(実行結果がわかりやすいように。意味はない) printf("\n"); printf("piNum = &iNum;\n"); printf("\n"); // 確認 printf("---------- 確認 ----------\n"); printf("&piNum:%p\n", &piNum); printf("piNum :%p\n", piNum); printf("*piNum:%d\n",*piNum); printf("--------------------------\n"); // 値を設定 *piNum = 777; // コードの表示(実行結果がわかりやすいように。意味はない) printf("\n"); printf("*piNum = 777;\n"); printf("\n"); // 確認 printf("---------- 確認 ----------\n"); printf("&piNum:%p\n", &piNum); printf("piNum :%p\n", piNum); printf("*piNum:%d\n",*piNum); printf("iNum :%d\n",iNum); // ここが重要 printf("--------------------------\n"); return 0; }
実行結果
int iNum; int *piNum; ---------- 確認 ---------- &iNum :0x7ffcc0cafd9c iNum :21958 &piNum:0x7ffcc0cafda0 piNum :0x7ffcc0cafe90 *piNum:1 -------------------------- iNum = 555; piNum = NULL; ---------- 確認 ---------- &iNum :0x7ffcc0cafd9c iNum :555 &piNum:0x7ffcc0cafda0 piNum :(nil) -------------------------- piNum = &iNum; ---------- 確認 ---------- &piNum:0x7ffcc0cafda0 piNum :0x7ffcc0cafd9c *piNum:555 -------------------------- *piNum = 777; ---------- 確認 ---------- &piNum:0x7ffcc0cafda0 piNum :0x7ffcc0cafd9c *piNum:777 iNum :777 --------------------------
ポイント
piNum = &iNum;
piNum = 777;
を実行すると、
iNum の値も 777 になる
仕組みを理解しましょう
piNum は iNum のアドレス(メモリ上の番地)を指している
ので、*pinum は iNum と同じなのです
次回は、char型のポインタについて