C語言呼叫函式的實數引數沒有改變為什麼

發布 科技 2024-08-09
6個回答
  1. 匿名使用者2024-01-31

    如果將變數名用作 C 語言整數和實數資料的引數,則系統規定實際引數僅決定形式引數的初始值,子函式內部形式引數的操作與實際引數無關。

    如果需要子函式中的操作來影響實際引數的內容,則需要使用實際引數變數的位址作為引數,這樣子函式中的形式引數操作可以直接在實際引數的儲存空間中進行。 您的子函式定義應修改為:

    int max(int *a,int *b)int c;

    if(*a>*b)

    c=*a; *a=*b; *b=c; }

    該函式應按以下格式呼叫:

    max(&m,&i);

    引數位址作為引數使用,對應子函式指標型別的形式引數。

    達到通過子函式中的實際引數位址直接操作實際引數變數內容的目的。

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

    int max(int a,int b)

    將其更改為 void max(int &a, int &b)。

    回去看書,弄清楚實引數和形式引數的關係,&的符號就是乙個參考字元。

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

    在這種情況下,值實際上是轉移的,所以改變的是引數的值,但對實際引數沒有影響。

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

    因為是傳遞值,所以可以通過傳遞位址來改變表單引數的值,可以這樣做,例如:max(&m,&i),函式名稱為:int max(int &a, int &b)。 它也可以通過指標傳遞。

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

    fun((a,b),(c,d,e));該語句包含 2 個引數。

    注意:(a,b)和(c,d,e)都是逗號表示式,逗號表示式的值取最小值,因此:

    fun((a,b),(c,d,e)))可以看作是fun((b),(e)); 包含 2 個引數。

    fun(a[3],n);語句中有 2 個引數,即 a[3] 的值,n 的值。

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

    例如,在 main 函式中,您希望將 a in a=5 傳遞給子函式,而這個 a 是乙個引數。

    表單引數:你傳遞的變數需要有人接收,有人想對,子函式負責接收這個 a=5,為了接收這個引數,子函式臨時在堆疊中開啟乙個空間來儲存它,這個空間只是暫時的,子函式結束後,就會被釋放, 所以不管你在子函式中怎麼樣,你怎麼改變傳進來的引數的值,但是引數的值不變,為什麼呢?原因很簡單,就是因為這兩者的儲存位置不在同乙個地方,而且值是一樣的,所以常被稱為“值呼叫”; 另一方面,還有一種傳遞它的方法,叫做“位址呼叫”,顧名思義,就是你要傳遞a=5,直接把這個變數的位址傳遞給子函式,這個時候,在子函式中,對a的運算就是直接對其儲存位置的運算,所以它會改變main函式中的值。

    總結:簡單來說,值轉移呼叫就是複製出乙個相同值的引數,你在子函式中修改的只是真實引數的副本; 在位址呼叫中,它們都指向同乙個儲存單元,並且通過修改位址的值來更改。 我不知道你是否理解這一點。

相關回答
28個回答2024-08-09

sqrt(i*;

在 C++ 中,您必須指定什麼型別,您的 i 是 int 型別,並且必須將其轉換為浮點。 >>>More

11個回答2024-08-09

房東**的樣子真的傷了我,全域性太多了,函式定義和宣告引數沒有型別化、判斷素數是否真的返回雙精度、printf使用錯誤。我就不多說了,給大家修改一下,編譯執行都成功了**如下: >>>More

17個回答2024-08-09

建構函式的引數不能全部具有預設引數。

無論類如何,都有乙個沒有引數的預設建構函式,無論您是否顯示它。 >>>More

4個回答2024-08-09

1。讀取 Hkey Current User Software\Microsoft\Windows CurrentVersion Explorer 下的登錄檔。 >>>More

10個回答2024-08-09

這不是問題。

函式宣告也不少。 >>>More