[解決済み] なぜプログラマーは、"参照渡し "は本当は "値渡し "だと言うのでしょうか?なぜそれが重要なのでしょうか?
疑問点
Camp;C++の参照渡しと、Javaの値渡しだけの類似の概念を知っています。 しかし、観点からは、すべてが値で渡すことではありませんか? C言語では、変数のポインタを関数に渡します。C言語では、変数のポインタを関数に渡しているのだから、その参照の値を関数に渡しているに過ぎない。Javaが参照渡しをサポートしていないのは、参照変数の値を関数に渡すだけだからです。つまり、参照変数を値で渡しているのです。C++では、引数を渡して、関数が同じメモリ位置で動作するように、この形式を使用して参照渡しの方法があります。
void swap(int &x, int &y)
しかし、C言語でのポインタによる参照渡しは、ポインタを値で渡しているだけです。
void swap(int* x, int* y)
この質問は少し馬鹿馬鹿しいかもしれませんが、私が持っている概念全体に大きな穴があるように感じています。つまり、参照による呼び出しの実際の定義は何なのか、これは別の文脈での値による呼び出しのpseduoの名前に過ぎないのか?
どのように解決するのですか?
ポイントは2つです。
- C言語では参照による呼び出しはありません。
- 値による受け渡しと参照による受け渡しは別物です。同じではありません。
値で渡す。 呼び出された関数は、スタックに新しい変数のセットを作成し、引数の値をそこにコピーします。
参照渡しとする。 呼び出される関数に値を渡す代わりに、元の変数への参照/ポインタを渡します。
<ブロッククオートプログラマーはなぜ、"参照渡し "は本当は "値渡し "だと言うのでしょうか?
元の変数への参照/ポインタを渡す際、実際にはオブジェクト/アドレスは値で渡されます。つまり、参照渡しは 値によって参照を渡す を意味するものではありません。 参照渡し の仮の名前です。 値で渡す . この2つの違いは、以下のサイトで説明されています。 この回答 . 抜粋してコピーしています。
<ブロッククオートURLを教えると、私は 参照渡し。 そのURLで 同じウェブページ 見ることができる。そのページが変更されると、私たち双方がその変更を見ることができます。URLを削除しても、そのページへの参照を破棄しているだけで、実際のページそのものを削除しているわけではありません。
そのページをプリントアウトして渡せば、私は 値で渡す . あなたのページは、オリジナルから切り離されたコピーです。その後の変更は見えませんし、あなたが行った変更(プリントアウトに落書きするなど)は、オリジナルのページには表示されません。プリントアウトを破棄した場合、あなたは実際に破棄したことになります。 あなたのコピー しかし、元のウェブページは無傷のままです。
関連
-
[解決済み] Firebase クラスにシリアライズするプロパティが見つからない
-
[解決済み] ストリングビルダー.イコール Java
-
[解決済み] java.util.concurrent.ExecutionException 例外をどのように処理しますか?
-
[解決済み] java.lang.ClassNotFoundException: クラス com.ibm.db2.jcc.DB2Driver が Worklight プラットフォームまたはプロジェクトに見つかりませんでした。
-
[解決済み] 1行目2列目でBEGIN_ARRAYを期待したが、BEGIN_OBJECTだった。
-
[解決済み] JAVA_OPTIONS、JAVA_TOOL_OPTIONS、JAVA_OPTSの違いについて
-
[解決済み] JavaFX 同じパッケージ内なのに「場所が必要です。
-
[解決済み] Spring ApplicationContext - リソースリーク: 'context' が閉じられない
-
[解決済み】C++で関数にオブジェクトを渡すには?
-
[解決済み] 参照渡しより値渡し、std::moveの方が優れている点
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] java.sql.SQLException: ORA-00933: SQL コマンドが正しく終了していません。
-
[解決済み] JVMフラグCMSClassUnloadingEnabledは、実際に何をするのですか?
-
[解決済み] JavaでFileFilterを作るには?
-
[解決済み] なぜJPAには@Transientアノテーションがあるのですか?
-
[解決済み] java.lang.IncompatibleClassChangeError: Mongo クラスを実装しています。
-
[解決済み] javascriptでExpression言語を使うには?
-
[解決済み] javax.naming.NameNotFoundException
-
[解決済み] タイプの安全性。アンチェック・キャスト
-
[解決済み] JavaFX 同じパッケージ内なのに「場所が必要です。
-
[解決済み】C言語での参照渡しについて