ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者: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
この回答へのお礼この回答にお礼をつける(質問者のみ)
最新から表示回答順に表示良回答のみ表示