Re: [c的指標]一個簡單的小問題,有沒有比較好的解釋?
※ 引述《"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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 7 篇):