日記ときどき読書感想文

プラス/マイナス思ったことをつらつらと。そのほとんどは思いつきです。

ポインタ変数

なんとなく何かを作りたく、プログラミングの勉強をしている。

iPhoneアプリが作れればいいなと思うので、C言語をチョイスした。

本当はObjective - Cが必要なんだけど、基本であるCを理解していないと把握できなさそうなので、とりあえずCを選んだ。

 

ポインタとやらがわからない。

ポインタの概念的なものはなんとなく理解できるのだが、どのようにコンピュータが計算しているのかイメージができない。

 

例えば、以下。

 

#include<stdio.h>

int main(){

int a = 1;

int  *p;

 

p = &a;

*p = 4

printf("%d",a)

return 0;

}

 

これでなぜ4が出てくるのかがわからん。

コンピュータの細かな計算を一つ一つ文章で理解したい。

こういうことなんだろうか。

 

#include<stdio.h>

int main(){

int a = 1;  aという変数をつくる。そして、aに1を代入した。a = 1となる。

int  *p;   pというアドレスを作る

 

p = &a;  pというアドレスは、aを見に行く。aに飛んでいく。aへのショートカット。

*p = 4   pというアドレスに4を代入。つまり、aに飛んでいって、4を代入。aに4を代入したことになる。

printf("%d",a) aを表示させる。さっきaに4が代入されたから4が表示される。

return 0;

}

 

あってるのかわからん。

 

じゃあこれは?

 

#include <stdio.h>

 int change(int *c)
 {
   *c = 100;

   return (*c);
 }

 int main()
 {
   int a = 10;
   int b = 0;

   b = change(&a); ここでchangeへジャンプする。

この後の流れは、上に戻って

change(*c);

c = &a;

*c = 100;    cというアドレスに100を代入。つまり、Cというアドレスはaにジャンプするからaに100を入れたことになる。そして、aはbに代入されるから、bは100となる。

そして、aも100になった。

   printf("aの値は%d, bの値は%d\n", a, b); ここで、100になったaと100になったaが代入されたbが表示されるので、aもbも100ということか。

   return 0;
  }

これであってるかな?
詳しい人誰か教えて下さい。