引数と戻り値: 値渡し
C言語の最も重要なルール「コピーして渡す」を理解する。
値渡し
引数の「コピー」を関数に渡す方式。元の変数は守られる。
実引数
関数呼び出し時に渡す実際の値。
仮引数
関数定義側で値を受け取る変数。
コピーの原則 (Call by Value)
C言語では、関数に引数を渡すとき、常に「値のコピー」 が作られます。元の変数そのものを渡しているわけではありません。
コピー用紙にメモ書きをして相手に渡すようなものです。相手がそのコピー用紙に何を書き込んでも、手元の原本が変わることはありません。これは安全ですが、値を書き換えたい場合(swap関数など)には不便です。
値渡しの実験
以下のコードは初心者がよくやる間違いです。関数内で入れ替えても、mainの変数は変わりません。
// 値渡し(コピー)の証明void swap(int a, int b) { int temp = a; a = b; b = temp; // ここでは入れ替わっているが...}
int main(void) { int x = 10, y = 20; swap(x, y); printf("x=%d, y=%d\n", x, y); // 出力: x=10, y=20 (変わっていない!) return 0;} Note: 本当に値を入れ替えたい場合は、後の章で学ぶ「ポインタ」が必要です。
実践テクニック
戻り値は一つだけ
C言語の return は一つしか値を返せません。複数の計算結果(例: 割り算の商と余り)を返したい場合は、ポインタを使うか、構造体にまとめる必要があります。
演習課題
課題1: 偶数判定
整数を受け取り、偶数なら1、奇数なら0を返す関数 is_even を作成してください。
課題2: 最大値
2つの整数を受け取り、大きい方を返す関数 max を作成してください。
合格ライン
値渡し(コピー)の意味を説明できる
なぜ swap 関数が動かないか理解している