<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 按值致電與按引用致電之間的區別 > 原文: [https://www.guru99.com/call-by-value-vs-call-by-reference.html](https://www.guru99.com/call-by-value-vs-call-by-reference.html) 在編程語言中,可以通過兩種方式調用函數:稱為按值調用和按引用調用。 在本教程中,您將學習, * [什么是按值調用方法?](#1) * [什么是按引用調用方法?](#2) * [按值方法](#3)調用的示例 * [通過引用方法](#4)進行調用的示例 * [按值調用與按引用調用](#5) * [使用按值調用方法](#6)的優點 * [使用按參考方法](#7)致電的優勢 * [使用按值調用](#8)的缺點 * [使用引用方法](#9)進行呼叫的缺點 ## 什么是按值調用方法? 按值調用方法將參數的值復制到該函數的形式參數中。 因此,對 main 函數的參數所做的更改不會影響該參數。 在此參數傳遞方法中,將實際參數的值復制到函數的形式參數,并將參數存儲在不同的存儲位置。 因此,在函數內部進行的任何更改都不會反映在調用者的實際參數中。 ## 關鍵區別 * 在“按值調用”方法中,原始值未修改,而在“按引用調用”方法中,原始值被修改。 * 在按值調用中,傳遞變量的副本,而在按引用調用中,傳遞變量本身。 * 在“按值調用”中,將在不同的存儲位置中創建實際和形式參數,而在“按引用調用”中,將在相同的存儲位置中創建實際和形式參數。 * 按值調用是 C ++,PHP,Visual Basic NET 和 C#等編程語言中的默認方法,而按引用調用僅受 Java 語言支持。 * 按值調用,使用直接方法傳遞變量,而按引用調用,則需要指針來存儲變量的地址。 ## 什么是按引用調用方法? 通過引用調用方法將參數的地址復制到形式參數中。 在此方法中,地址用于訪問函數調用中使用的實際參數。 這意味著對參數所做的更改會更改傳遞的參數。 在這種方法中,內存分配與實際參數相同。 函數中的所有操作都對存儲在實際參數地址上的值執行,修改后的值將存儲在同一地址。 ## 按值調用方法的示例 ``` void main() { int a = 10, void increment(int); Cout << "before function calling" << a; increment(a); Cout << "after function calling" << a; getch(); void increment(int x) { int x = x + 1; Cout << "value is" << x; } ``` **輸出**: ``` before function calling 10 value is 11 after function calling 1-0 ``` 因為在 main()中聲明為'a'的變量與在 increment()中聲明為'x'的變量不同。 在此程序中,只有變量名相似,但是它們的內存地址不同,并且存儲在不同的內存位置。 ## 通過參考呼叫的示例 ``` Public static void(string args[]) { int a = 10; System.out.println("Before call Value of a = ", a); Void increment(); System.out.println("After call Value of a = ", a); } Void increment(int x) { int x = x + 1; } ``` **Output:** ``` Before call Value of a =10 After call Value of a =11 ``` 因為在中聲明為'a'的變量引用/指向 main()中的變量'a'。 此處的變量名稱不同,但是兩者都指向/引用相同的內存地址位置。 ## 按值調用與按引用調用 ![](https://img.kancloud.cn/bf/2c/bf2cb86a89f96f8df191a19cd7b266e3_601x168.png) | **參數** | **通過值調用** | **通過引用致電** | | --- | --- | --- | | 定義 | 調用函數時,通過復制變量傳遞值時,稱為“按值調用”。 | 在調用函數時,使用編程語言而不是復制變量的值,而是使用變量的地址,稱為“按引用調用”。 | | 爭論 | 在此方法中,傳遞變量的副本。 | 在這種方法中,變量本身被傳遞。 | | 影響 | 在變量副本中進行的更改永遠不會在函數外部修改變量的值。 | 變量的更改也會影響函數外部變量的值。 | | 價值變更 | 不允許您對實際變量進行任何更改。 | 允許您通過使用函數調用來更改變量的值。 | | 傳遞變量 | 變量的值使用簡單的方法傳遞。 | 需要指針變量來存儲變量的地址。 | | 價值修改 | 原始值未修改。 | 原始值被修改。 | | 記憶體位置 | 實際參數和形式參數將在不同的存儲位置中創建 | 實際參數和形式參數將在相同的存儲位置中創建 | | 安全 | 實際參數仍然安全,因為它們不會被意外修改。 | 實際的論點并不安全。 它們可能會被意外修改,因此您需要謹慎處理參數操作。 | | 默認 | 許多編程語言(例如 C ++。PHP)中的默認設置。 Visual Basic NET 和 C#。 | 大多數編程語言(例如 JAVA)都支持它,但默認情況下不支持。 | ## 使用按值調用方法的優點 值方法通話的優點/好處: * 該方法不會更改原始變量,因此會保留數據。 * 每當調用函數時,都不要影響實際參數的實際內容。 * 實際參數的值傳遞給形式參數,因此形式參數的任何更改都不會影響實際情況。 ## 使用按引用方式致電的優勢 通過引用方法調用的優點: * 該函數可以更改參數的值,這非常有用。 * 它不會創建僅包含一個值的重復數據,這可以幫助您節省內存空間。 * 在這種方法中,沒有參數的副本。 因此,它的處理速度非常快。 * 幫助您避免錯誤更改 * 讀取代碼的人從不知道可以在函數中修改該值。 ## 使用按值調用方法的缺點 這是按值調用的主要缺點/缺點: * 更改實際參數還可以修改相應的參數變量 * 在此方法中,參數必須是變量。 * 您不能直接在函數體中更改變量。 * 有時參數可以是復雜的表達式 * 為同一變量創建了兩個副本,這些副本的存儲效率不高。 ## 使用按引用方法調用的缺點 這是使用按引用調用方法的主要缺點: * 強有力的非零保證。 接受引用的函數需要確保輸入為非空。 因此,不需要進行空檢查。 * 通過引用使功能在理論上不純。 * 終身保證是參考的大問題。 當使用 lambda 和多線程程序時,這特別危險。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看