構造体のポインタを関数の引数に取る場合

構造体のポインタを関数の引数に取る場合、関数内で構造体のメンバ変数に値を代入すると、関数を抜けた後も構造体のメンバ変数の値は保持されます。

関数実行の目的が、構造体のメンバ変数に値を代入することであれば、ポインタを関数の引数に渡してあげる必要があります。

下記がサンプルコードになります。
関数の実行前、関数内で値を代入後、関数の実行後で、構造体のメンバ変数をprintf出力しています。

下記が実行結果になります。
関数実行後も値が保持されているのが確認できます。

スポンサーリンク

構造体を関数の引数に取る場合

構造体を関数の引数に取る場合、関数内で構造体のメンバ変数に値を代入しても、引数で渡した構造体のメンバ変数に値は代入されません。
関数が実行されるときには、一旦構造体がコピーされて、コピーされた構造体の操作になるためです。

下記がサンプルコードになります。
先程と同様に、関数の実行前、関数内で値を代入後、関数の実行後で、構造体のメンバ変数をprintf出力しています。

下記が実行結果になります。
関数の実行後、関数内で代入した値は反映されていないことが確認できます。

スポンサーリンク