ホームページ >バックエンド開発 >Golang >ポインターのセマンティクスを持つ値はどれですか?

ポインターのセマンティクスを持つ値はどれですか?

WBOY
WBOY転載
2024-02-10 21:30:12497ブラウズ

ポインターのセマンティクスを持つ値はどれですか?

php エディターのバナナが、この記事で誰もが抱くよくある質問に答えます: 「どの値にポインター セマンティクスがあるのですか?」 PHP には、ポインター セマンティクスを持つ特定の種類の値がいくつかあります。ポインタのセマンティクス。これは、メモリ内で他のタイプの値とは異なる方法で処理されることを意味します。具体的には、配列とオブジェクトはポインター セマンティクスを持つ値です。配列またはオブジェクトを別の変数に割り当てるときは、実際には元の配列またはオブジェクトへのポインタを新しい変数にコピーします。これは、新しい変数に変更を加えると、元の配列またはオブジェクトに影響が及ぶことを意味します。整数、浮動小数点数、文字列などの他のタイプの値の場合、代入操作では実際にはポインタをコピーするのではなく、元の値を新しい変数にコピーします。したがって、新しい変数を変更しても元の値には影響しません。これは、ポインター セマンティクスを持つ PHP における値の概念です。

質問内容

Goではすべて値渡しです。値を指定して関数を呼び出すと、値がコピーされ、関数は値のコピーにのみアクセスします。

ポインタ セマンティクスでは、ポインタを渡すかのように、何かを「値によって」渡して「元の」値を更新できます。

ポインター セマンティクスを持つ型はどれですか?

解決策

関数に渡される値を変更する場合は、すべての種類の変数でポインターを使用する必要があります。

唯一の例外は、一部の参照型はポインターを渡さずに メンバー を変更できますが、型の値はポインターを使用せずに変更できないことです。

スライス メンバーを変更する例 (スライス自体は変更しない) (playground):

リーリー

スライス自体を変更するには (playground):

リーリー

ただし、この場合でも、厳密に言えば、渡された値を実際に変更しているわけではないことに注意してください。この場合、渡される値 はポインタ であり、ポインタ を変更することはできません。

以上がポインターのセマンティクスを持つ値はどれですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。