可以用指針,但是C語言在函數調用實參和行參時只能進行單獨的“值交換”,所以即使用指針也要改為他的值去進行交換,這樣才可以傳進實參,進行交換,否則只能在調用函數中有效。
創新互聯專注于企業全網營銷推廣、網站重做改版、盱眙網站定制設計、自適應品牌網站建設、H5高端網站建設、成都做商城網站、集團公司官網建設、成都外貿網站制作、高端網站制作、響應式網頁設計等建站業務,價格優惠性價比高,為盱眙等各大城市提供網站開發制作服務。
ee參數int m,int n是傳值,m,n交換對a,b沒有影響。方法1:定義函數int ee();不傳值,直接把a,b定義成全局變量。方法2:定義函數int*ee();不傳值,ee函數中用static定義數組[2]代替m,n。返回這個數組。
你寫的交換函數中,a=b;一句相當于把a同樣指向了b的地址,所以執行完這一句之后,a和b實際上就是一個地址空間了,輸出的值當然是一樣的了。*a=*b;改變的是內容不是地址。。
然后 你 *x = *y, 會把 b的值賦值給a,此時雖然 tmp仍然指向a,但是a的值此時已經變成b的值了。a本身的值丟失了。
少年,指針不會就盡量不要亂用。指針指向的是地址。不是值。。你只是換了值。但是指針指向的地址沒有換,當然輸出的還是不變的嘍。初學者不推薦使用指針。
1、如一樓所說的那樣,C語言的函數如過參數不是指針類型的話那么,那么函數運行的時候是自己再開辟一個內存把您代進去的參數復制過去,然后函數是對開辟的這兩個變量進行的操作。因此實際交換的是a,b而不是x,y。
2、輸出x和y值之前沒有調用fun函數,所以x,y的值一直是初始值。
3、要想交換可以傳x,y的地址,這樣寫 void swp(int *x,int *y){ int tmp;tmp=*x;x*=*y;y*=tmp;} 調用的時候swap(&x,&y);這樣傳遞的是x,y的地址,函數內部修改的其實是x,y的值了。
4、你交換的是函數的局部指針變量p和q,并沒有交換p和q指向的目標*p和*q。
5、你看看c語言中的實參和形參的關系。另外看一下指針。第一個有返回值是因為你不管什么時候都對同一個地址進行操作。第二個沒有返回值是因為形參變量只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。
1、ee參數int m,int n是傳值,m,n交換對a,b沒有影響。方法1:定義函數int ee();不傳值,直接把a,b定義成全局變量。方法2:定義函數int*ee();不傳值,ee函數中用static定義數組[2]代替m,n。返回這個數組。
2、C語言的函數形式參數是函數的局部變量,你把實參地址值傳給形參指針,在函數中交換只在函數中起作用,影響不到主調函數中實參指針的值。
3、因為對于函數swap()來說,傳入的兩個地址是值傳遞形式的,在其內部是局部作用域下的兩個變量,完成這兩個地址“值”的交換,并不能對調用時的實參產生影響。故而交換失敗。
4、首先要捋順一下,先看第一段程序。這段程序的目的就是為了將兩個變量的數值進行交換。
名稱欄目:C語言中不能調用函數交換 c語言函數調用沒反應
網址分享:http://vcdvsql.cn/article38/deesisp.html
成都網站建設公司_創新互聯,為您提供營銷型網站建設、ChatGPT、網站收錄、網站制作、軟件開發、關鍵詞優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯