« VMware Playerバージョンアップ | トップページ | プログラミングの実習 »

2007/10/21

ポインタじゃないとダメ

void add(int num)
{
  num++;
}

int main(void)
{
  int x;
  add(x);
  return 0;
}

先日、実習でこのようなコードを書いたとき、関数addに渡した変数xがプラス1されていないことに当惑している人が大勢いました。

mainのなかでadd(x)と書いたとき、関数addには変数xの一時的なコピーが渡されます。したがって、関数addのなかではxのコピーをいじくっているだけで、実際のxには反映されません。

ここでポインタが必要になってきます。コードの変更点は

void add(int num) 

→ void add(int *num)

add(x)        

→ add(&x);

このようになります。&xは変数xのアドレス、つまり番地です。そして仮引数numを「intへのポインタ型」にして宣言します。(仮引数の前に*をつければよい。ちなみに*は間接演算子という。)関数addに渡されたポインタ(アドレス)に間接演算子*を適用するとそのポインタの示すオブジェクト(実体)に変更を加えることができるようになります。

|

« VMware Playerバージョンアップ | トップページ | プログラミングの実習 »

C」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: ポインタじゃないとダメ:

« VMware Playerバージョンアップ | トップページ | プログラミングの実習 »