実際には、最終的な分析がされて値渡しと参照渡し複雑もう少しそれを理解することができ、我々は見て行くことができ、異なるが、しかし、ポインタに関連した値によって参照渡しボーエンエリア。
シンプルな機能を初めて目
2つのブレークポイント値P1にそれぞれ
と
そして、メイン機能でそれを呼び出し、自分自身に便利な機能FUN1を書きます
私たちは、もともと期待:という店のFUN1関数intメモリのために適用することで、その後、メモリだけでアプリケーションにFUN1関数ポインタに渡すことができます。
しかし、2つのブレークポイントの最終結果はこれです:
実行FUN1機能した後、値p1はまだ空であることは、私たちの期待は成功しなかったと言うことです。
当社オリジナルの期待を実現するためには、に分けることができる2つの段階:
最初のステップ:新しいメモリ
ステップ2:私たちのメモリのうちにちょうど新しいポインタをしてみましょう。
実際には、FUN1機能は確かに新しいメモリであるが、しませんでした私たちは、メモリから新しいへのポインタを渡すことができ、そのP1ポインタの値と、それは変化しなかった(P1の値は、メモリアドレスがP1で指さです) 。
これはなぜでしょうか?
ここでは、必要とする正式なと実際のパラメータ、伝統的な価値観を、およびへの参照を渡すの概念:
要するに、場合我々は、パラメータのタイプの関数で参照されていない、我々は引数(P1主な機能は、上記)関数に通過するときに、関数のパラメータ(PのFUN1関数)の値を引数によって得られます得コピー、すなわち、このときの値とパラメータの引数は、同じ空であり、彼らは二つの異なるものです、
それは単に同じメモリを指し、加えて、それは任意の接触を持っていません。
次に、関数本体内の新しい声明FUN1、そして効果があるメモリ不足に新しいパラメータpのポイントを作るために、そしてあなたの引数(P1)の半分ダイムではありません、今で元々何P1か何か。
私たちは、これを確認するためにFUN1機能にブレークポイントをヒットすることができます。
同じ値P1とp:初めに。
私たちは、パラメータpの値が実際に変更され見ることができます。
そして、ターンの参照を:関数がパラメータ参照型である場合、関数に渡される引数は、ときパラメータは、単純な複製のためだけではない、パラメータの引数の別名は直接になり、それがこれを言うことです仮パラメータと実パラメータは、あなたが正式なパラメータで動作するものであるとき、引数本体にリアルタイムに反映されます。私たちは、fun2関数を書くことができ、参照型への関数パラメータの型は、として、思考の効果を得ることができます:
PS:私はほんの少しの新しいを持っている上記のコードではなく、削除、関係なく、埋め行動の殺すために、このチューブは、我々は真似しないでください!