C為什麼這裡用了swap函式而沒有發生交換

2021-05-05 19:27:03 字數 1943 閱讀 3611

1樓:不知詳解

其實這個問題主要取決於你的swap函式所修改的x,y是不是main函式中的a,b

執行結果告訴你不是.

那麼x,y是什麼呢 x,y代表的是函式棧當中的引數.

相信你聽說過函式呼叫的過程有壓棧這一說法吧。

其實x,y是儲存在棧當中的

函式呼叫的時候會為傳入引數在棧當中生成值相等的副本。

x,y代表的就是這個副本,而不是代表傳入引數。所以你修改x,y不能修改a,b。

如果想要修改a,b就必須知道a,b所在的記憶體地址.所以可以通過傳入地址解決問題.

void swap(int *x,int *y)

如果使用c++可以使用引用解決問題,引用大多數編譯器也是通過指標實現的.

void swap(int &x,int &y)

----------

很多人都說實參和形參是這個問題原因。

其實我說的是本質.形參和實參只是起概念上的作用罷了。並不能準確的理解這個問題.

2樓:匿名使用者

呼叫swap(a,b);可以理解成執行下面這一段**

可以看出,調換的只是x和y的值,a與b的值並沒有發生變化

3樓:

這是因為呼叫函式時進行的是 值傳遞

swap(a,b);實際上執行的是把a的值傳給x,把b的值傳給y,在函式內部把x,y的值交換了。但實際上a,b的值並沒有變。

要想改變a,b的值可以這樣:

#include"iostream.h"

void swap(int *x,int *y);

int main()

void swap(int *x,int *y)

4樓:

形參改變不影響實參,所以要取地址。**如下。

#include"iostream.h"

void swap(int &x,int &y);

int main()

void swap(int &x,int &y)也可以直接把輸出放在函式中

#include"iostream.h"

void swap(int x,int y);

int main()

void swap(int x,int y)

5樓:匿名使用者

理解形參和實參是解決這個問題的關鍵。。。

6樓:匿名使用者

樓上都已經說的很清楚了,建議 參考值傳遞,指標傳遞,引用傳遞,別名傳遞等不同傳遞方式加以區分;

c++庫函式中是否有swap這個函式啊?

7樓:匿名使用者

swap應該是自己寫的一個交換函式,並不是c/c++系統定義的函式void swap(int&a,int&b)你看看這個

函式把str和本字串交換。

例如:   string first( "this comes first" );

string second( "and this is second" );

first.swap( second );

cout << first << endl;

cout << second << endl;

8樓:匿名使用者

貌似要重新編寫的。c語言我記得當初就重新定義編寫的。

9樓:id鬆綠

是標準函式,可以直接呼叫,預設引數有兩個

10樓:董俊錕

有,是交換兩個數的值

我編寫了一個簡單的程式

可以執行

#include

using namespace std;

int main()

C語言中什麼叫呼叫函式?為什麼函式和函式之間是呼叫關係

呼叫函式就是計算機編譯或執行時,使用某個函式來完成相關命令。對無參函式呼叫時則無實際參數列。實際參數列中的引數可以是常數 變數或其它構造型別資料及表示式。各實參之間用逗號分隔。在程式中通過對函式的呼叫來執行函式體,其過程與其它語言的子程式呼叫相似。c語言中,函式呼叫的一般形式為 函式名 實際參數列 ...

C語言這個函式執行結果為什麼是0,4,

c a a a b,b 4 最先執行的是 a,a變成1 然後執行的是 a a,a變成0 然後執行的是c a,c變成0 相當於不變 然後執行的是a b,a變成0 相當於不變 然後執行的是b 4,b變成4 所以最後結果是a 0,b 4,c 0 這是一個逗號表示式,逗號表示式的結果取決於最後一個表示式的結...

為什麼鋼琴將c設定為do,而不是a

以c為baido的由來,對於人聲而言,du標準音a在最適合zhi歌唱的音高範dao圍裡卻不是唱 版do,而是唱la 小字一組a 換權言之,c調是最合適人聲歌唱的調性,因為大多數歌曲的唱名範圍是從c調低音5到高音3,適合普通人發聲。這樣,標準音a在c調裡就只能唱成la了。後來的標準鍵盤樂器 首先是教堂...