作者mantour (朱子)
看板Programming
标题Re: [c的指标]一个简单的小问题,有没有比较好的解释?
时间Sun Jun 1 12:19:46 2008
※ 引述《"mynews" <[email protected]>, 看板: 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