SE&ビジネスパーソンとしてお勉強中なブログ

スポンサーサイト

--/--/-- -- [Edit]

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[C言語] 関数間での構造体の受渡し

2010/02/21 Sun [Edit]

関数を呼ぶ場合における、構造体の実体渡しとアドレス渡しの違いを実験。

注)
当初、アドレス渡し(ポインタ渡し)のことを参照渡しと表記していましたが、 コメントでのご指摘の通り、C言語で「参照渡し」はできません。
アドレス渡しの場合、ポインタの「値」であるアドレスが仮引数に「コピー」されます。
よって、あくまでもポインタの値を「値渡し」しているのであって、「参照渡し」とは異なります。
ちなみに「参照渡し」では、実引数と仮引数は同一の記憶域が共有されます(コピーしない)。 従って、呼び出され側での操作が呼び出し側に反映されることになります。
C言語では、ポインタを介して間接的に呼び出し側の構造体を操作することによって、 あたかも「参照渡し」したかのような効果を実現することになります。


当然のことですが実体渡しの場合、仮引数にコピーされた構造体を操作することになるので呼び出され側での変更は、呼び出し側には影響を与えません。

この○○渡しという言葉の使い方は、別途まとめてみた。あくまでも個人的な見解ですが。引数の渡し方

ちなみに実体渡しの場合、引数のコピーが発生するのでアドレス渡しの方が効率的と言えます。


構造体の実体渡しとアドレス渡しの実験。




実行結果
Prev
[C言語] 構造体コピー
Top
SE&ビジネスパーソンとしてお勉強中なブログ
Next
ベトナム戦記

Comments

Re: 構造体の値渡しと参照渡しの違い

こんにちは。

C言語には「参照渡し」は存在しません。
「ポインタの値を『値渡し』すること」は参照渡しと言いません。

Re: Re: 構造体の値渡しと参照渡しの違い

> C言語には「参照渡し」は存在しません。
> 「ポインタの値を『値渡し』すること」は参照渡しと言いません。

ご指摘ありがとうございます。
おっしゃられる通りです。
迂闊でした。

修正しておきますね。
間違った情報を広めてしまうところでした。。

 
 
 
 
 
 
 
  非公開コメント
 

Track Backs

TB URL 

Top
SE&ビジネスパーソンとしてお勉強中なブログ

ブログ内検索

カテゴリー

最近の記事

最近のコメント

最近のトラックバック

RSSリンク

Amazon

楽天 人気商品

なかのひと

iKnow

Dictationバッジ

合わせて

あわせて読みたいブログパーツ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。