C言語のポインタって怖いの?怖くないの?

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し

おはこんばんにちは!うにゃうにゃエンジニアの猫です(=^・^=)
ITの先輩方からC言語にはポインタっていうものがあって、それがラスボス?か大ボスみたいに大変だと聞きました。
なので、ゆっくり基礎から覚えたことを復習します。

※超超超初心者の備忘録な為、厳密には正確では無いかもしれませんが、
そういう風に理解しているんだなぁと、あたたかい目で見て下さい。

変数aというint型の変数があって、その値が5だとします。
その例を考えてみます。この図を書きました。


右側に変数aを用意しました。値は5です。

変数aは主記憶に格納されていて、変数aがある主記憶の場所には東京都新宿区何丁目…みたいな住所のような物があります。
その住所みたいなものをアドレスって言います。
仮にそのアドレスを100番地とします。


左側には変数aのアドレスを値として持つポインタpがあります。

また、p自体にも北海道稚内市何丁目…みたいなアドレスがあります。
そのアドレスを300番地とします。

ポインタpが見ているアドレスの中身(住人)はaの値で5です。
これをポインタが見ているというのを表す表記として*pを使います。
*p=5になります。

…と、文章と図だけだとイマイチ分かりづらいので、それをプログラミングしてうちのパソコンではどんな感じになるのか調べてみたいと思います。

実行結果です。

プロうグラムはこちらになります。

#include <stdio.h>
int main(void){
int a=5;
int p;    //ポインタ宣言

p=&a;   //ポインタpはaのアドレスを格納

//これらは等しい。aの値を示す
printf(“aの値…a=%d\n”,a);
printf(“pが見ている値…p=%d\n\n”,*p);

//これらは等しい。aのアドレスを示す。
printf(“aのアドレス…&a=%p\n”,&a);
printf(“ポインタpの値…p=%p\n\n”,p);

//これはpが格納されているアドレス。
printf(“ポインタpのアドレス…&p=%p\n”,&p);
}

これで私のアタマはスッキリしました。
ご精読ありがとうございました(=^・^=)

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し