C 傳值呼叫的問題

2022-11-24 10:30:09 字數 1136 閱讀 7420

1樓:匿名使用者

這是傳值呼叫, 意思就是 形參 的 改變不會影響 實參的值。

你執行一下可知 主函式呼叫了swap函式後 a,b的值並沒有發生交換。

原因是,呼叫swap函式時 編譯器為 swap(int a,int b) 中的形參 a , b單獨分配記憶體空間,並接受主函式傳遞來的值,這塊記憶體空間和 main()函式中的 a ,b 不是同一記憶體空間。 所以在swap(int a,int b) 中 a , b發生了交換,但main函式中a , b沒發生交換。即 引數僅在呼叫時由實參向形參傳遞,而不可由形參向實參傳遞 。

要使a ,b發生交換 需要使用傳址呼叫。程式改為如下:

#include

using namespace std;

使用 引用 時 ,對於void swap(int a,int b) 編譯器並沒有給形參a,b分配新的記憶體空間,只是使 形參a,b指向了main函式中實參a,b的記憶體空間,他們共享同一內空間,即把地址給了形參。所以在void swap(int a,int b)函式中對這塊記憶體的改變也就改變了實參的值。

除了使用引用,也可以使用指標,指標方式和引用方式都屬於傳址呼叫。

2樓:救贖削腎客

作用域,你知道麼?這題目就是想把你搞混

在swap函式裡面的a.b和main函式裡面的a.b其實不一樣。swap函式裡的a.b是區域性變數。而main裡面的是全域性的變數。

你可以看看百科裡面的「區域性變數」

「主調函式與被調函式的操作物件各不相同,引數僅在呼叫時由實參向形參傳遞,而不可由形參向實參傳遞」

其實是哄你的。你把函式一改就可以理解這句話。

swap(int c,int d)

你就知道可以把c。d交換後但是main裡面的ab交換不了,就這意思

3樓:匿名使用者

在你呼叫swap(a,b);時,main函式裡面的a,b 的值傳到swap(int a,int b)中的a,b,即實參向行參傳遞。在swap()函式裡面,你交換了swap(int a ,int b)函式裡面的行參a,b的值,可是swap(int a ,int b)的值交換了,但是mian()函式裡面的a,b值並沒有交換,即 形參不可向實參傳遞。

在呼叫函式時,函式是怎樣傳值的,c語言函式呼叫時,實參和形參是如何傳遞的?什麼時候要寫指標型變數?求高手指點

在c語言中,實參將值傳給函式中的形參,實現了自上而下的值傳遞,就可以呼叫函式了。舉個淺顯一點的例子吧 include void main int swap int x,int y 在主函式中,將實參a,b的值傳遞給被呼叫函式中的形參x,y,即將a,b分別代入x,y中計算,即達到了呼叫的目的。函式的傳...

vb6 0關於傳值傳址,在VB中傳值呼叫和傳址呼叫的區別?????

swap1是傳值,所以它內部對x和y做任何修改都不會影響到a和b的值,所以swap1執行完畢後a和b的值是不變的 而swap2是傳址,所以x與a y與b所指向的是同一個記憶體地址,換句話說就是它們實際上是同一個變數,所以函式內部對x和y所做的任何修改都會直接反映到a和b,因此swap2執行完畢後a和...

c語言中用於交換值函式問題,C語言中呼叫函式交換兩個變數的值需要傳遞地址,為什麼相加就可以直接用

因為void gsd int a,int b 中的a和b在呼叫時用實參的值進行拷貝,在函式中交換的只是拷貝過來的副本,所以原來的實參值並沒有發生交換操作。而在void gsd int a,int b 中int 型別使a和b的性質發生了變數,它們是 引用變數 呼叫時它們就成了實參的 別名 就是說在函式...