亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一個C語言swap函數,表示不解?

一個C語言swap函數,表示不解?

DIEA 2019-02-06 10:06:20
#include<stdio.h>void swap(int *a,int *b){ int *t;t=a; a=b; b=t;}main(){ int i=3,j=5,*p=&i,*q=&j;swap(p,q); printf("%d %d\n",*p,*q);}結果是3 5我覺得p和q換了地址,應該是5 3呀
查看完整描述

3 回答

?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

你只是在swap里交換了送進來的兩個指針的參數,這樣并不能真正的交換值。

swap應該修改為:
void swap(int *a,int *b)
{
int t;
t=*a; *a=*b; *b=t;
}

查看完整回答
反對 回復 2019-03-22
?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

void fun(int *a,int *b)
{
int *c;
c=a;c=b;b=c;
} 這個函數實際上什么都沒有做。形參 a,b中存的地址互換。只做這些沒有任何意義。

地址傳遞也是“傳遞”,
fun(p,q) 就是 a=p;b=q ,然后,函數里面 a<=>b p 與q里面存儲的地址沒有變化。



查看完整回答
反對 回復 2019-03-22
?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

函數在傳遞的時候,地址傳遞是不錯,ab交換了,可是pq未改變,原因是abpq都是變量,有存儲單元,但ap不是同一在存儲單元,同理bq也不是,剛傳遞的時候,a和p指向i,當swap交換了ab,a就指向j,無關pq的事,pq的內容不變,指向就不變。通過函數調用來改變指針變量,很危險,我建議少用為好。如果要用,可以用函數返回值的方法改變。

查看完整回答
反對 回復 2019-03-22
  • 3 回答
  • 0 關注
  • 887 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號