#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;
}

一只斗牛犬
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里面存儲的地址沒有變化。

守候你守候我
TA貢獻1802條經驗 獲得超10個贊
函數在傳遞的時候,地址傳遞是不錯,ab交換了,可是pq未改變,原因是abpq都是變量,有存儲單元,但ap不是同一在存儲單元,同理bq也不是,剛傳遞的時候,a和p指向i,當swap交換了ab,a就指向j,無關pq的事,pq的內容不變,指向就不變。通過函數調用來改變指針變量,很危險,我建議少用為好。如果要用,可以用函數返回值的方法改變。
- 3 回答
- 0 關注
- 887 瀏覽
添加回答
舉報
0/150
提交
取消