「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go 関数でのポインターの割り当てが元の値に影響を与えないことがあるのはなぜですか?

Go 関数でのポインターの割り当てが元の値に影響を与えないことがあるのはなぜですか?

2024 年 11 月 13 日に公開
ブラウズ:352

Why Does Pointer Assignment in Go Functions Sometimes Not Affect the Original Value?

Go 関数でのポインタの割り当て: 結果が異なる理由

Go で関数にポインタを渡すとき、どのようにポインタが割り当てられるかを理解することが重要です。ポインターが使用されることと、それが元の値に与える影響。この説明は、Value フィールドを変更することを目的として、Test 構造体にポインターを渡すコード スニペットを中心に展開します。

最初のコード スニペットは、ポインターに新しい Test 構造体を割り当てて Value フィールドを変更しようとしていますが、 (*p = Test{4})、実際の値の変更に失敗します。これは、ポイントされた値ではなく、ポインター変数 p を単に再割り当てするだけであるためです。 f() 関数内の p 変数は独立して存在し、main() の p 変数が指す値には影響しません。

対照的に、2 番目のコード スニペットでは、p.Value明示的に 4 に設定すると、Value フィールドが正常に変更されます。これは、 演算子がポインターを逆参照し、実際に指す値へのアクセスと変更を可能にするためです。

補足として、 main() 関数のポインター変数に格納されているアドレスは、次のパスを渡すことで変更できます。そのアドレス (*) を f() 関数に渡します。ただし、このアプローチは、p.Value.

を使用してポイントされた値を直接変更する場合に比べて効率も利便性も劣ります。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3