C言語再入門、ポインタに感するあれこれ

ポインター変数

定義
  • ポインター変数は通常の変数と違い、変数名の前に*を付けて定義する

char *p1;
int *p2;
unsigned long *p3;

演算

char *p1;
long *p2;

    1. p1;
    2. p2;
  • 2つの変数の演算結果は同じではない。p1は+1されるが、p2変数は+4される(longが32bitのケース)
  • p2が4バイト(32bit)変数であるlongに対するポインターだからである。
  • ポインターのインクリメントあるいは加算減算は、指定した数だけ値が増減するのではなく、指定した数だけポインターが「進むか戻るかする」のである。

ポインター渡し

int hoge(int *foo) {
return *foo;
}

  • 関数を呼ぶ側は、原則として参照演算子(アドレス演算子)であるアンパサンド記号(&)を変数名に冠してアドレスの形にする必要がある。

hoge(&piyo);