誰能幫我解釋一下如何在 C 中傳遞引用值

發布 科技 2024-08-20
8個回答
  1. 匿名使用者2024-02-01

    看到有幾條線**,卻不告訴我們是哪條線**,吊著別人的胃口不好。

  2. 匿名使用者2024-01-31

    在C中,沒有一般的參考概念,這是C++的概念。

    在 C++ 的函式引數中,有兩種形式,其中:

    typevar,稱為引用方法;

    typevar,稱為傳遞。

    兩者之間的區別在於,當傳遞引用時,實際傳遞給函式的表單引數是對實際引數的引用,而不僅僅是傳遞給函式的值。 具體效能如下:

    傳遞引用時,引數和引數是相同的變數,即它們使用相同的記憶體空間並具有相同的位址。 傳輸值時,兩者的位址不同;

    傳遞引用時,沒有新變數,因此沒有類物件引數的構造和銷毀。 如果是值傳遞呼叫,呼叫時會構造,退出函式時會解構。

    由於引用使用的是原始引數的位址,因此引用引數值的修改會在退出函式被埋沒後反映在大鍵函式中,而傳遞值呼叫對引數的修改不會影響大鍵功能。

  3. 匿名使用者2024-01-30

    1. 傳遞變數引數。

    在傳統 C 語言中,函式的引數在呼叫函式時由值傳遞,這意味著函式引數不具備返回值的能力。

    所以在傳統的C語言中,如果你需要乙個函式的引數來具有返回乙個值的能力,它通常是通過指標來實現的。 例如,實現。

    用於兩個整數變數值交換的 C 程式如下:void swapint(int *a, int *b) 使用引用機制後,上述程式的 C++ 版本是呼叫函式的 C++ 方法:swapint(x,y); C++ 自動將 x 和 y 的位址作為引數傳遞給 Swapint 函式。

    2. 將大型物件傳遞給函式。

    當乙個大型物件傳遞給函式時,可以使用引用引數來使引數傳遞更有效,因為引用不會生成物件。

    複製,即當引數被傳遞時,不需要複製物件。 下面的示例定義乙個具有有限整數集的類:const maxcard=100; class set 建構函式 friend setoperator *(set,set); 過載運算子符號 *,用於計算集合的交集,使用物件作為值傳遞引數 friendsetoperator*(set&,set&) 過載運算子符號 *,用於計算集合的交集,並使用物件的引用作為值傳遞引數。

    首先,考慮集合交集的實現 setoperator *(set set1,set set2)returnres; 由於過載運算子不能單獨對指標進行操作,因此我們必須將運算宣告為集合型別而不是集合 *

    每次使用 * 進行交集運算時,整個集合都是重複的,效率非常低。 我們可以通過引用來避免這種情況。 setoperator *(set& set1,set& set2)returnres;}

  4. 匿名使用者2024-01-29

    在C++中,所謂的指標就是引數,或者變數就是引數,傳達的是內容; 換句話說,它是單向傳輸,傳遞的是乙個數值; 我們可以理解,參考是真實的位址; 這裡你的第一行是函式中引數的傳遞,但使用的引數只是指標,傳遞實際上是值; 最後一行是引用,是位址傳遞的真正意義; 下面是乙個簡單的示例來詳細說明:

    讓我們從第一行開始。 例如,現在我們傳遞乙個指標變數 b 給 fun(int*x) 引數,(假設變數 b 指向位址 2000),當你在 fun 函式中使用 x 時,使用 x++,根據你上面的解釋,如果“在函式體中改變 x 就是改變引數的指向”,函式返回後, B的內容應該變成2004,但實際上並非如此,B的內容仍然是2000,也就是說指標引數仍然是值的單向傳遞,它不改變相應引數的內容;你可以自己輸出B和A的內容,實際看看是否可以!!

    至於改變*x就是改變引數的值,不是很準確; 應該說,改變 *x 就是改變 x 指向的位址中值的內容; 例如,如果引數 b 指向位址 2000,記憶體位址 2000 中的內容是 100,如果在函式 fun 中使用 (*x)++ 來表示 2000 位址 ++ 的內容,即 100 變成 101,因為記憶體中 2000 位址的內容發生了變化,所以在呼叫函式結束後訪問記憶體 2000 時, 裡面的內容已經是101了;

    對於第二行:引數用int&x表示引用,即再次重新命名要傳入的引數,別名x,與上面不同的是函式中的x不分配記憶體(上面一行呼叫函式時會給x分配記憶體,呼叫返回函式時會釋放記憶體), 但是傳遞的引數的記憶體位址會給出給對應的函式,也就是說,對 x 的任何操作都是在操作引數,例如輸入引數是 b(int b,這裡傳遞的 b 是 int,當然如果換函式,也可以傳入指標型別 b) 其實, x 和 b 等價於乙個變數,但它們有兩個名稱;當你修改函式以使用指標的引用時,在函式中更改表單引數的指向實際上是更改實際引數的指向;

    我想說細節,忍不住囉嗦,希望對你有幫助!!

  5. 匿名使用者2024-01-28

    fun(int&x) 其實我是這樣理解這個問題的,什麼是參考,前面有定義,後面有參考!

    例如:int a=10; fun(a);這是函式呼叫!

  6. 匿名使用者2024-01-27

    第乙個是 int 指標。

    第二個是 int 變數。

  7. 匿名使用者2024-01-26

    fun(int *x)

    上述說法是錯誤的。 在函式主體中更改 x 不會影響引數,x 只是引數的副本,更改 x 不會更改引數的值。

    fun(int &x)

    上面這句話也是錯誤的。 這個引數是對乙個引數的引用,也就是說,引數和引數是一樣的,它們是同乙個物件,在函式體中改變x就是改變引數。 而真正論點的指向並不存在。

    因為這只是乙個整容手術。 &x 不是對 x 位址的引用,而是對 x 是對引數的引用這一事實。 也就是說,這意味著 real 和 form 引數是同乙個物件。

  8. 匿名使用者2024-01-25

    fun(int &x) 這是乙個引號。 它從何而來?

相關回答
6個回答2024-08-20

由於它是任意的,因此將其消除,並使用浮點型別直接獲得結果。 >>>More

13個回答2024-08-20

在大鍵函式中,a 和 b 是定義的變數;

在調製函式中是 x,y,max(int x, int y) 在 main() 中是宣告的 max 函式,x,y 是形式引數,它只是形式引數,不占用記憶體。 外層max(int x, int y)為引數,即引數的值傳遞給引數,即執行時為c=max(a,b); ,它跳轉到以下函式中的特定函式,此時,max函式中x=a的值,以及y=b的值。 最後,max 返回 z 的值,在本例中是 x,y 的較大值,分配給 c >>>More

3個回答2024-08-20

《王衝的書房》孤兒王衝從小就喜歡讀書,而且從未忘記。 >>>More

4個回答2024-08-20

例項化對類的引用。

9個回答2024-08-20

仔細檢視變數範圍部分。

其中定義的變數僅在 {} 中有效,未在其中定義的變數將在下一級的 {} 中找到。 >>>More