可以用指針,但是C語言在函數(shù)調(diào)用實(shí)參和行參時(shí)只能進(jìn)行單獨(dú)的“值交換”,所以即使用指針也要改為他的值去進(jìn)行交換,這樣才可以傳進(jìn)實(shí)參,進(jìn)行交換,否則只能在調(diào)用函數(shù)中有效。
創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、盱眙網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為盱眙等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
ee參數(shù)int m,int n是傳值,m,n交換對a,b沒有影響。方法1:定義函數(shù)int ee();不傳值,直接把a(bǔ),b定義成全局變量。方法2:定義函數(shù)int*ee();不傳值,ee函數(shù)中用static定義數(shù)組[2]代替m,n。返回這個(gè)數(shù)組。
你寫的交換函數(shù)中,a=b;一句相當(dāng)于把a(bǔ)同樣指向了b的地址,所以執(zhí)行完這一句之后,a和b實(shí)際上就是一個(gè)地址空間了,輸出的值當(dāng)然是一樣的了。*a=*b;改變的是內(nèi)容不是地址。。
然后 你 *x = *y, 會把 b的值賦值給a,此時(shí)雖然 tmp仍然指向a,但是a的值此時(shí)已經(jīng)變成b的值了。a本身的值丟失了。
少年,指針不會就盡量不要亂用。指針指向的是地址。不是值。。你只是換了值。但是指針指向的地址沒有換,當(dāng)然輸出的還是不變的嘍。初學(xué)者不推薦使用指針。
1、如一樓所說的那樣,C語言的函數(shù)如過參數(shù)不是指針類型的話那么,那么函數(shù)運(yùn)行的時(shí)候是自己再開辟一個(gè)內(nèi)存把您代進(jìn)去的參數(shù)復(fù)制過去,然后函數(shù)是對開辟的這兩個(gè)變量進(jìn)行的操作。因此實(shí)際交換的是a,b而不是x,y。
2、輸出x和y值之前沒有調(diào)用fun函數(shù),所以x,y的值一直是初始值。
3、要想交換可以傳x,y的地址,這樣寫 void swp(int *x,int *y){ int tmp;tmp=*x;x*=*y;y*=tmp;} 調(diào)用的時(shí)候swap(&x,&y);這樣傳遞的是x,y的地址,函數(shù)內(nèi)部修改的其實(shí)是x,y的值了。
4、你交換的是函數(shù)的局部指針變量p和q,并沒有交換p和q指向的目標(biāo)*p和*q。
5、你看看c語言中的實(shí)參和形參的關(guān)系。另外看一下指針。第一個(gè)有返回值是因?yàn)槟悴还苁裁磿r(shí)候都對同一個(gè)地址進(jìn)行操作。第二個(gè)沒有返回值是因?yàn)樾螀⒆兞恐挥性诒徽{(diào)用時(shí)才分配內(nèi)存單元,在調(diào)用結(jié)束時(shí),即刻釋放所分配的內(nèi)存單元。
1、ee參數(shù)int m,int n是傳值,m,n交換對a,b沒有影響。方法1:定義函數(shù)int ee();不傳值,直接把a(bǔ),b定義成全局變量。方法2:定義函數(shù)int*ee();不傳值,ee函數(shù)中用static定義數(shù)組[2]代替m,n。返回這個(gè)數(shù)組。
2、C語言的函數(shù)形式參數(shù)是函數(shù)的局部變量,你把實(shí)參地址值傳給形參指針,在函數(shù)中交換只在函數(shù)中起作用,影響不到主調(diào)函數(shù)中實(shí)參指針的值。
3、因?yàn)閷τ诤瘮?shù)swap()來說,傳入的兩個(gè)地址是值傳遞形式的,在其內(nèi)部是局部作用域下的兩個(gè)變量,完成這兩個(gè)地址“值”的交換,并不能對調(diào)用時(shí)的實(shí)參產(chǎn)生影響。故而交換失敗。
4、首先要捋順一下,先看第一段程序。這段程序的目的就是為了將兩個(gè)變量的數(shù)值進(jìn)行交換。