1樓:匿名使用者
因為在swap函式中,a b是x y的資料複製品,其變化與x y本身無關,如果要交換,需要傳遞x y的位址到子函式中,進行交換!
1 #include
2 void swap(int *a ,int *b )3
10 int main()11
2樓:匿名使用者
因為在swap函式中,a b的位址和x y的位址不同,其變化與x y本身無關,如果要交換,需要把x y的位址傳到子函式中,進行交換!
#include
void swap(int *a ,int *b )int main()
3樓:陽頂天鹿鼎記
這樣的實現相當於實參給形參賦值,形參是子函式中的變數,他與實參完全沒有關係,在子函式中實現了兩個形參的值進行互換,對實參無影響
若想實現實參的值互換,則可把形參型別改為指標或者引用,這樣操作形參,即是操作實參。
4樓:crazy_小豬
呼叫這個 swap(x,y);函式,只是將xy的值傳遞過去了,就像你把x,y的複製體傳過去了,在swap()函式裡改變的是x,y的複製體,而不是x,y的原版。
這是一種值傳遞的方式,你可以使用位址傳遞,即:將xy的位址當引數。swap(&x,&y)
還有一種方式是傳引用,即的實現如下:
5 int temp;
6 temp=a;
7 a=b;
8 b=temp;
這樣,x,y的值也會改變!
5樓:全球百科知識文庫
簡單一點說,就是函式傳遞的時候有幾種傳遞方式,一種是值傳遞,一種是引用傳遞,一種是位址傳遞.你這裡是值傳遞方式.也就是說,傳遞進去的只是實參的乙個拷貝.
拷貝只是區域性變數,當子程式返回時,就會被析構.所以,實參並沒有被改變
void swap(int& a ,int& b )可以改為這樣,(引用傳遞)
void swap(int* a,int* b)或者這樣,(位址傳遞)
6樓:
你可以這樣理解呼叫swap(x,y)會跳轉到swap函式內,swap函式開始執行前會初始化變數
int a=x;int b=y;這裡交換的a、b不是x、y;
7樓:匿名使用者
你呼叫函式是採用傳值方式,將x y的值傳遞過去,但是x y卻並未發生改變
要想改變,建議傳位址,用指標交換
ab你可以看做是xy的複製品
8樓:匿名使用者
用void swap(int& a,int& b)就可以
形參是你呼叫函式時候建立的臨時變數,函式結束該變數就被丟棄了
9樓:我可不是導演
普通的非引用型別的引數通過複製對應的實參實現初始化。當用實參副本初始化形參時,函式並沒有訪問呼叫所傳遞的實參本身,因此不會修改實參的值。
對於你這個程式,在執行swap時,只交換了實參的區域性副本,而傳遞給swap的實參並沒有被修改。
c語言交換兩個數的問題????
10樓:
兩段**的差異是:
第二段**:將a、b兩個數的位址傳入swap()函式,此函式內部將這兩個位址彼此做了交換(即兩個指標所指的位址發生了互換,但相應位址下的數並沒有變化)。因為對於函式swap()來說,傳入的兩個位址是值傳遞形式的,在其內部是區域性作用域下的兩個變數,完成這兩個位址「值」的交換,並不能對呼叫時的實參產生影響。
故而交換失敗。
另外,再給你個無需中間變數交換兩個數值的寫法:
a = b - a + (b = a); // 無需中間變數交換a、b的值
11樓:何處可人生
你第二的個函式是在改變指標,你可以用指標的指標試試
c語言,函式來交換兩個數值,為什麼我執行的結果兩個數值沒有交換?
12樓:牢思語
你的交換函式中的變數只在交換函式中有效,所以沒辦法影響函式外的變數,應該傳指標
13樓:匿名使用者
你這是按值傳遞
swap(&a,&b);
void swap (int *n,int *m)
14樓:黑夜不是我
你交換的只是swap函式內的區域性變數n,m值,應該改成這樣#include
void swap (int *n,int *m)void main()
注意函式形參的傳值和傳位址的區別
15樓:做而論道
這函式,確實不能轉換。
c語言程式設計:使輸入兩個數,交換他們的值並輸出。 是否可以這樣編寫
16樓:育知同創教育
#include
int main ()
c語言用函式如何實現兩個數交換?
17樓:匿名使用者
#include"stdio.h"int swap(int *a,int *b)
main()
18樓:天平座de魚
c語言用函式如何實現兩個數交換的話?比較難發揮。
19樓:倒霉熊
#include
main()
printf("%d > %d\n",*za,*zb);
printf("%d > %d\n",a,b);
}int hanshu(int *x,int *y)
20樓:匿名使用者
int hanshu(int *x,int *y)這裡應把temp定義為int型
int temp;
temp = *x;
*x = *y;
*y = temp;
這樣就內對容了
21樓:溪貝溪貝
#include
void huhuan(int*, int*);
int main(void)
void huhuan(int*m, int*n)
c語言 寫乙個函式交換兩個數的值,為什麼一定要用指標?
22樓:娛樂小八卦啊
運用**解釋指標運用的理解如下:
#include
using namespace std;
int fun1 (int a,int b)
int c;
c=a;a=b;b=c;
cout<<"a1:" int *c; c=a;a=b;b=c; cout<<"a2:"<<*a<<";b2:"<<*b int *c; c=*a;*a=*b;*b=c; cout<<"a3:"<<*a<<";b3:"<<*b int c; c=*a;*a=*b;*b=c; cout<<"a4:"<<*a<<";b4:"<<*b int c; c=a;a=b;b=c; cout<<"a5:" int aa=1,bb=2; fun1(aa,bb); cout<<"aa1:" cout<<"aa2:" cout<<"aa3:" cout<<"aa4:" fun5(aa,bb); cout<<"aa5:" 輸出結果為: a1:2;b1:1 aa1:1;bb1:2 a2:2;b2:1 aa2:1;bb2:2 aa3:1;bb3:2 a4:2;b4:1 aa4:2;bb4:1 a5:2;b5:1 aa5:2;bb5:1 main中呼叫fun1()時,將實參a,b的值傳遞給了交換函式,如果此時在swap1中列印,可以看到結果是正確的,但是該過程其實是將aa和bb分別複製了乙份給了函式,執行完fun1()之後,aa和bb的值沒有任何變化。 fun2(),看似的確使用了指標,但還是失敗,因為這裡是將aa和bb的位址給交換了,而並沒有交換aa和bb的值。在這裡由於未給c賦值,c中並沒有確定的值,c中的值是不可預見的。此時c可能指向乙個未知的儲存單元。 而嚴重的情況是,該單元的資料可能是有用的,因此fun2()不但沒有實現兩個數的交換,反而給系統的穩定性帶來威脅。 fun3(),將int賦值給int *,編譯錯誤。 fun4()是正確的。為了在函式中改變了的變數能被其它函式呼叫,正確的辦法是用指標變數作為函式引數,在函式執行過程中使指標變數所指向的變數值發生變化。 函式呼叫結束後,哲別變數值的變化依然保留下來,這樣就實現了通過函式呼叫是變數的值發生變化,在其它函式中可以使用這些改變了的值的目的。 fun5()也是正確的,這是引用的重要應用之一。對於引用的操作實際上是作用在引用所因的物件上。 擴充套件資料 在函式中的引數,並不是呼叫者的變數,而是臨時申請的變數a和b存放main函式中變數a和b的值,並在函式中用來計算,在fun中給a和b賦值都是在操作這兩個臨時申請的變數,函式返回後,這兩個變數被捨棄,函式呼叫也沒有將這兩個臨時變數的值返回給main函式中呼叫使用的引數功能。 所以,在函式中要操作呼叫者申請的變數,需要給出它們的指標,函式中用指標來找到這些變數的位置和內容。 23樓:匿名使用者 void swap(int *xx,int *yy)上面這種才可以。 你的兩個方法中,第一種方法,雖然引數是指標,但是作為引數的指標也還是臨時複製的,你在方法裡互換操作的是臨時指標而不是指標指向的內容 第二種方法,引數是兩個int變數,但作為引數這兩個變數只是臨時複製了乙份,操作這兩個複製的臨時值並不能改變本體。 24樓: c語言轉換變數的值,並不是直接轉換,而是通過反覆賦值進行值的覆蓋;有三種轉換方式,傳值,傳址,傳引用。如果不用指標,將b值符給a後,a,b的值是一樣的,a值的儲存位址不變,輸出時還是a值;而用指標後,通過指標指向位址,可進行位址層面的轉換,輸出電腦以為的a時,其實是b的位址上的b值才將兩個變數的值完全交換,此為傳址轉換。 25樓: 因為給函式引數分配的空間是臨時的 用完就被**了。 c語言 編寫程式,從鍵盤上輸入兩個不同的整數,讓兩個整數實現資料交換。怎麼解答 求大神 26樓:風火輪 #include int main() else return 0;} 27樓:匿名使用者 int main() 28樓:愛我苗藝 #include int main() c語言中用函式交換兩個變數的值? 29樓:苑人考尹 這個無法交換資料。 c語言函式引數的基本規則是值傳遞,所以傳遞時只能實現實參向形參的單向的、值的傳遞。這就是為什麼需要使用指標才能實現值交換的原因。 30樓: 輸入變數:x,y #include void main() void f(int*xp,int*yp )呼叫函式後,x,y的值就被交換了 31樓:匿名使用者 應該在void swap(int x,int y) 裡新增一句,如上 32樓:匿名使用者 #include "stdio.h" #include "conio.h" void swap(int* x,int *y)main() 女生手拉手可以理解,如果男生,就不理解了,會用另類眼光來看待。再說,兩個大男人拉拉扯扯。有失大雅。因為在中國這個古老而現代的國家。人生第一重要的事情就是結婚生孩子。兩個男人在一起時注定不能繁衍生息的。而且我國本來對於同性還沒有那麼開放。很多人都會有偏見!兩個女生手拉手大家覺得是好朋友,兩個男生手拉手... 真心的小愛 標準c與經典c的比較 本附錄列出了標準c與經典c之間 即kernighan和ritchie合著的the c programming language一書第 1版所描述的語言 的大多數顯著差異。標題指明瞭本書的哪章在討論每個標準c的特性。本附錄沒有介 紹c庫,因為它已經變化很多年了。如果使... 當然可以,這個沒有什麼,對於家裡來說,這個還屬於雙喜臨門呢,應該是一件好事才對。兩兄妹可以同一年結婚嗎 為什麼不可以?嫁出去乙個娶回來乙個家庭成員還是那些,双喜啊。不過版,也許不同的地區風權 俗習慣不一樣,這個你可以問問別人,如果確實父母不同意,那可以讓哥先結婚,你也不必急著嫁出去,和家人還有嫂子多...兩個男生為什麼不可以手拉手
C語言,為什麼結果出來兩個n不同
兄弟兩個或者姐妹或者兄妹兩個可不可以在同一年結婚