Go 関数でのポインタの割り当て: 結果が異なる理由
Go で関数にポインタを渡すとき、どのようにポインタが割り当てられるのかを理解することが重要です。ポインターが使用されることと、それが元の値に与える影響。この説明は、Value フィールドを変更することを目的として、Test 構造体にポインターを渡すコード スニペットを中心に展開します。
最初のコード スニペットは、新しい Test 構造体をポインターに割り当てて Value フィールドを変更しようとしていますが、 (*p = Test{4})、実際の値の変更に失敗します。これは、ポイントされた値ではなく、ポインター変数 p を単に再割り当てするだけであるためです。 f() 関数内の p 変数は独立して存在し、main() の p 変数が指す値には影響しません。
対照的に、2 番目のコード スニペットでは、p.Value明示的に 4 に設定すると、Value フィールドが正常に変更されます。これは、 演算子がポインターを逆参照し、実際に指す値へのアクセスと変更を可能にするためです。
補足として、 main() 関数のポインター変数に格納されているアドレスは、次のパスを渡すことで変更できます。そのアドレス (*) を f() 関数に渡します。ただし、このアプローチは、p.Value.
を使用してポイントされた値を直接変更する場合に比べて効率も利便性も劣ります。以上がGo 関数でのポインターの割り当てが元の値に影響を与えないことがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。