Cのポインタ

音とは直接関係ないんだけど、色々いじる上で、よく出てくるんだけどあやふやなままスルーしていたので、旅先の図書館で勉強してみました。
以下、覚書。

そもそもポインタとは?
それを指し示す物(まんま?)。
物理アドレスとか仮想アドレスとか。処理系によって違う。
通常は具体的な中身を知らなくてもいい。

ポインタ型、ポインタ変数、ポインタ値
intとかfloatとかと同様にポインタ型というものがある。
ポインタ型は他の型から派生する。
<-どういうこと?
例えばポインタを+1した時にアドレスが1増えるのではなく、その型の大きさだけ増える
->次の変数を指すようになるということ。

例えば
int foo = 0;
とすると、0がfooの値で、&fooがポインタ値。
int *bar ; //int型のポインタ変数barを宣言。まだ何も指していない。
bar = &foo ; //barはint型の変数fooを指す。
で、*bar が指している物の中味を示す。この場合は0。

int *bar ; とした時と*barでは"*"に意味的なつながりはない。
あくまで"int *"で「int型のポインタを宣言」で、
"*"は「ポインタの指している物の中味の意味」。

なんでこんな面倒な物を使う?
Cには高級な機能がないので、複雑な操作をするのにポインタを使う。
例えば
変数の中味を変えるため。
void foo(int *x){
   *x=なんたら
}
で、実引数の値を変えられる。

合ってる?

コメント