質問 |
||
| 質問者:binma | 構造体を値で渡す良い点はありますか? | |
|---|---|---|
困り度:
|
C言語で以下のように引数に値を渡す場合とポインタを渡す場合では、 どんなメリットデメリットはあるのでしょうか? 普段はポインタばかり渡していたので、値を渡す経験がなく疑問に思いました。 構造体を値で渡す良い点はありますか? struct sample { int a; int b; }; void test1(struct sample sa){} void test2(struct sample *sa){} |
|
質問投稿日時:08/04/17 22:21 質問番号:3955654 |
||
回答良回答10pt |
|
| 回答者:okazaki0ko | 今回の例の構造体は小さいからあまりでメリットになりませんが サイズの大きな構造体だと、値で渡すと関数の呼び出しのオーバーヘッドが大きくなります。 struct sample { int i; char string[1024]; double x[1000]; }; これを値で渡していたら・・・。 |
|---|---|
| 種類:回答 どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/04/17 22:33 回答番号:No.4 |
|
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| 回答者:asuncion | おっと失礼。 ポインタで渡す場合のデメリット test2関数で変更した内容によって、test2関数を呼び出している側において本来内容を変えてほしくない領域が不用意に書き換わる |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/04/17 22:32 回答番号:No.3 |
|
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| 回答者:asuncion | 値で渡す場合のメリット test1関数でいくら内容を変更しても、test1関数を呼び出している側での構造体の内容を不用意に壊すことがない 値で渡す場合のデメリット test1関数でいくら内容を変更しても、test1関数を呼び出している側に 変更内容を伝えられない ポインタで渡す場合のメリット test2関数で変更した内容が、test2関数を呼び出している側に的確に伝わる ポインタで渡す場合のデメリット test2関数で変更した内容によって、test2関数において本来内容を変えてほしくない領域が不用意に書き換わる メリットとデメリットは上記のように裏返しです。 プログラムを書く側の責任で、状況に応じて使い分けることが肝要でありましょう。 |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/04/17 22:27 回答番号:No.2 |
|
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答良回答20pt |
|
| 回答者:episteme | ナカミを壊される心配がありません。 |
|---|---|
| 種類:回答 どんな人:専門家 自信:自信あり |
|
| |
回答日時:08/04/17 22:25 回答番号:No.1 |
|
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |