C言語で関数に引数を渡す仕組みは?
Cの関数パラメータは値渡しで渡されます。
- 関数を呼ぶときに、呼び出し元は実引数の値を呼び出し先の仮引数に渡す。
- 形式パラメーターは関数内部で新たな変数として渡された値を持ち、関数のスタックフレーム上で割り当てられます。
- 関数内で、形式パラメータを使う方法でその新しい変数操作をします。
- 関数が実行が終わると、関数スタックフレームは破棄され、仮引数の変数も合わせて破棄されます。
C言語では値渡しを行っているため、関数は実引数の値のコピーを受け取り、メモリアドレスを受け取るわけではない。そのため、関数内で仮引数の値を変更しても、実引数の値は変更されない。
ポインタ型の引数を渡した場合には、アドレス(メモリ上の位置)を渡すので、ポインタ操作によって渡された引数が指すメモリ上の値を変更できることに注意。そのため、Cではポインタ引数によって渡された引数(変数)の値を変更することができる。