ポインタ変数
なんとなく何かを作りたく、プログラミングの勉強をしている。
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;
}