Re: [c的指標]一個簡單的小問題,有沒有比較好的解釋?

看板Programming作者 (朱子)時間17年前 (2008/06/01 12:19), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/7 (看更多)
※ 引述《"mynews" <noreplay@gmail.com>, 看板: Programming》之銘言: : 為什麼這樣 x y 值沒有交換? 傳入的值是地址,交換地址沒有用嗎? : 而註解的部份會交換x y? 你要記得函式裡的x,y和函式外的x,y已經是不同的變數了 如果把函式裡傳入的引數用不同代號表示相信你就會看出來了 void interchange(int *a,int *b){ int *t; //int t; t=a; //int t=*a; a=b; //int *a=*b; b=t; //int *b=t; } int main(void){ int x=1; int y=2; printf ("x=%d,y=%d\n",x,y); interchange(&x,&y); printf ("x=%d,y=%d\n",x,y); return 1; } a是一個指向x的指標,b是指向y的指標 "//"之前的寫法把a,b的值交換了,也就是變成a指向y,b指向x, 壓根沒動到x,y的值或位置 "//"之後的寫法才是把a,b所指向的位置,也就是x,y的值交換 或是你寫成 int main(void){ int x=1; int y=2; int *a,*b,*t; a=&x; b=&y; printf("x=%d,y=%d,*a=%d,%b=%d\n",x,y,*a,*b); t=a; a=b; b=t; printf("x=%d,y=%d,*a=%d,%b=%d\n",x,y,*a,*b); return 1; } 結果應該是 1,2,1,2 1,2,2,1 也就是a,b指向的位置變了,但x,y不變 : #include <stdio.h> : void interchange(int *x,int *y){ : int *t; //int t; : t=x; //int t=x*; : x=y; //int *x=*y; : y=t; //int *y=*t; : } : int main(void){ : int x=1; : int y=2; : printf ("x=%d,y=%d\n",x,y); : interchange(&x,&y); : printf ("x=%d,y=%d\n",x,y); : return 1; : } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.213.158
文章代碼(AID): #18GYDay4 (Programming)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 7 篇):
文章代碼(AID): #18GYDay4 (Programming)