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了。後來的標準鍵盤樂器 首先是教堂...