ポインタじゃないとダメ
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に渡されたポインタ(アドレス)に間接演算子*を適用するとそのポインタの示すオブジェクト(実体)に変更を加えることができるようになります。
| 固定リンク
「C」カテゴリの記事
- CG法(2008.12.09)
- NTEmacs + MinGW + MSYSでWindows上にC言語開発環境を構築してみる - その5(2008.10.10)
- NTEmacs + MinGW + MSYSでWindows上にC言語開発環境を構築してみる - その4(2008.10.09)
- NTEmacs + MinGW + MSYSでWindows上にC言語開発環境を構築してみる - その3(2008.10.08)
- NTEmacs + MinGW + MSYSでWindows上にC言語開発環境を構築してみる - その2(2008.10.07)
この記事へのコメントは終了しました。
コメント