ローカル変数または一時変数への参照を返す
提供されたコード スニペットでは、関数 foo() がローカル変数 i への参照を返します。 。スタック上に存在しない変数への参照を返すという明らかな違反にもかかわらず、コードは実際に main() 関数の変数 i に値 6 を割り当てています。
これは癖によるものです。関数呼び出しのメモリ管理。関数が呼び出されると、関数のローカル変数を格納するためにスタック フレームが割り当てられます。ただし、関数が戻った後でも、関数呼び出し元のスタック フレームがまだアクティブである間、スタック フレームは短期間割り当てられたままになります。
この間、返された関数内のローカル変数への参照は、依然としてそのローカル変数を指します。スタック上の元のメモリの場所。これにより、返された参照を使用して、呼び出し元のスコープ内の対応する変数にアクセスして変更できるようになります。
ただし、この動作は非常に予測不可能であり、実装固有であることに注意することが重要です。コンパイラ、最適化設定、実行環境によって異なる場合があります。したがって、この動作に依存することは一般的に推奨されず、優れたプログラミング手法とは見なされません。
以上がローカル変数への参照を返すと機能するように見えることがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。