C 形參與變數引數,C 形參與實際引數,引用

發布 科技 2024-02-08
17個回答
  1. 匿名使用者2024-02-05

    若要通過傳遞函式來更改變數的值,必須傳遞位址。 您的程式正在傳遞變數 swap(a,b) 的值; 如果要更改變數的值,必須傳遞變數的位址,或者通過指標來傳遞,如果是陣列,可以直接使用陣列名稱,但如果是陣列的元素,則仍然需要使用位址。 就像樓上的那個改變他一樣。

    你問的問題其實很簡單,我是很久沒學東西的初學者,多看書,這個問題很基礎。 如果你以後使用指標時不明白這一點,你就不會得救了!

  2. 匿名使用者2024-02-04

    可以使用指標將交換結果帶回主程式。

    void swap

    float t;

    t= *x;

    x = *y;

    y = t; }

    void main

    swap( &a, &b);

  3. 匿名使用者2024-02-03

    這就是形式引數和實引數的問題,swap(a,b)看這句話,這句話呼叫上面的swap函式,x,y的值變成a,b,等價於x=a,y=b,x,y的值在函式中交換,所以y=a,x=b,但是函式只改變xyah a, b 沒有變化,所以最終輸出 ab 仍然是 70,40

    如果向交換函式新增 cout << x<

  4. 匿名使用者2024-02-02

    因為int a、int b只是由引數位址操作,而引數位址和原來的變數位址不同,自然不涉及原來的變數(可以輸出函式swap a,b來試試,它們都已經交換過了),指標就是對原來的變數位址進行操作,也就是 直接對A和B進行主操作,因此可以互換。

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

    如果呼叫了swap函式,則傳遞了變數的值,但不傳遞了變數的位址,並且無法更改變數的值。 要使 a=70 b=40,您可以使用 void swap(float &x, float &y) 或 void swap(float *x, float *y)。C++ 程式設計書中有詳細的解釋。

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

    void swap 只傳遞變數的值,而不傳遞變數的位址,所以變數的值自然是不能改變的。

    樓上是對的,如果你仔細看看C書,它都是基本的。

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

    你好好看看譚浩強的C語言,介紹很清楚。

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

    我在學習C語言的時候也想了很久,問了很多人後也沒聽懂!

    最後,看多了,不加解釋就明白了!

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

    請記住:函式都是值轉移。 引數是傳遞的原始變數值的副本。 但你必須弄清楚你傳遞的價值是什麼。

    a、普通變數時間值通過,嗯,沒問題。 您無法更改原始變數的值。

    b,如果是指標,則為位址的副本,其實是值傳遞(value pass of the address)。 你不能改變原來的變數(位址)的值,但你可以(不一定)改變位址指向的東西,即所謂的引數被改變了......

    c,如果是引用,也是傳入的位址,但是這個位址已經解析過了,所以可以直接使用,不需要加*來解析(位址值是傳遞的,使用的時候已經解析過了)。 更改值與指標相同,但如果無法更改位址(引用實際上是解析的常量指標),則更明顯。

    1.值已傳遞,無法修改原始值。 空間已分配。

    2,你的意思是 char* p=0; char* &p2=p;它是什麼樣子的? 沒錯,你可以這樣做,那麼你用p2和用p是一樣的,表示式的意思是作為引數傳遞,你可以改變引數的值,也就是你可以改變引數指標的位址... 而且有時候函式需要傳遞乙個引數來改變位址,引數可以像這樣是char*&p2(也可以char**,但需要解析位址後使用)。

    然後你可以改變函式中的位址,然後改變原來的指標(即指標(位址)的值)。 實際上,原理與我上面所說的相同。 但是重量很大*

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

    它是乙個值傳遞,在呼叫函式時分配空間,並在呼叫後釋放空間。

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

    對於值傳遞呼叫,將引數的值傳遞給引數,並為引數分配空間,並且對引數執行的任何操作都不會更改引數的值。

    對於位址呼叫,意味著傳遞了引數的位址,沒有為引數分配新的空間(其實我個人認為引數是有空間來儲存引數位址的),這裡對引數的任何更改都會影響引數,使引數發生相應的變化。

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

    首先,你上面的**有誤! int swap(int &a, int &b) 函式?

    函式編譯不會通過(如果不返回值,可以使用void,修改見2)void swap(int &a, int &b)。其次,可以進行交換! 3.int &a,int &b,是乙個表單引數,說白了,就是用來做佔位符的,當你傳入引數(實數引數)的時候,一般來說,實數引數會被複製到表單引數中,但是你用了乙個引用,就沒有複製的問題,&相當於取位址,函式交換引用, 也就是說,它相當於原來的 x 和 y 也相應地發生了變化!

    4.執行螢幕截圖:

    如果您不熟悉 C++,請了解指標和引用。 關注一些科技部落格也不錯,最好從一開始就養成寫部落格的習慣,你會感謝我的! ☺

  13. 匿名使用者2024-01-24

    這是因為當呼叫 swap 函式時,引數 a 和 b 會獲取 x 和 y 值的副本。 從數值上講,a 等於 x,b 等於 y,但實際上記憶體中占用的位址不同,所以 swap(x,y); 這是它的樣子(編譯器不是這樣處理的,甚至有多種方法可以處理它,只是為了便於理解):

    int a = x;

    int b = y;

    int t = a;

    a = b;

    b = t;

    所以 x 和 y 不會互換。 如果要通過函式更改函式外部變數的值,例如此處的交換,則可以使用指標或引用。

    參考比較簡單,就是將函式的引數列表改成這樣:

    void swap(int &a, int &b) 不需要更改其餘部分。

    如果使用指標,則需要在呼叫位置獲取變數的位址,並在函式中使用間接引用,這比引用更麻煩,效率更低。

  14. 匿名使用者2024-01-23

    #include

    using namespace std;

    int swap(int &a,int &b)int main(){

    int x,y;

    cin>>x>>y;

    swap(x,y);

    cout<

    沒問題,x,y 將被交換。

    但是你的理解不正確,x,y不是分配的問題。

    int swap(int &a,int &b) 是使用引用的函式引數。

    換句話說,a、b、x 和 y 不是賦值,但同一事物只是名稱不同。

    相當於給 x 和 y 起乙個昵稱,本質上是一樣的。

  15. 匿名使用者2024-01-22

    3.int &a,int &b,是乙個表單引數,說白了,就是用來做佔位符的,當你傳入引數(實數引數)的時候,一般來說,實數引數會被複製到表單引數中,但是你用了乙個引用,就沒有複製的問題,&相當於取位址,函式交換引用, 也就是說,它相當於原來的 x 和 y 也相應地發生了變化!

  16. 匿名使用者2024-01-21

    以下是傳遞函式引數的兩種方法:

    1.你開始學習的是值轉移,即引數複製引數的值,它們基本上是兩個不同的變數,但值是相同的,所以對引數的任何操作都不會影響引數。

    2.陣列的名稱是陣列第乙個元素的位址,即指標傳遞,陣列的位址被傳遞,自定義函式獲取位址對陣列進行操作,會影響陣列。 (請注意,這裡沒有副本,而是對陣列本身的間接訪問)。

  17. 匿名使用者2024-01-20

    這是函式的引數。

    f2{v1,v2) 為返回值,即值,以下相同。

    中間的(v3、v4、v5)也是乙個。 接收引數應該是乙個結構體或類似的東西,您可以檢視函式所在的括號中的逗號數。

相關回答