c语言,关于指针的若干疑问。。。。。

来源:百度知道 编辑:UC知道 时间:2024/06/15 23:43:20
如:
int a=1,b=2;
int *t,*p1=&a,*p2=&b;
t=p1;
p1=p2;
p2=t;
为什么a和b没有改变呢?

int a=1,b=2;

int *p = &a;

p = &b;//执行这一句之后a的值不会变的,就是你的代码中a,b不会交换的原因

*p = 3;//现在b的值就变成了3

//所以改变p的值不会改变p指向的内存,即*p

你只是交换了指针,并没有交换指针指向的值,所以a,b的值没有变化

int a=1,b=2;
int t,*p=&a,*q=&b;
printf("a=%d,b=%d\n", a, b);
t=*p;*p=*q;*q=t;
printf("a=%d,b=%d\n", a, b);
这样才是交换了a,b的值。
-----------------------------
比较下面的代码:
int a=1,b=2;
int t,*p=&a,*q=&b;
printf("*p=%d,*q=%d\n", *p, *q);
t=p;p=q;q=t;
printf("*p=%d,*q=%d\n", *p, *q);

t=p1;
p1=p2;
p2=t;

这里是交换两个指针的指向而已,并不是改变a,b的值
改变a,b的值是
int t;
t = *p1;
*p1=*p2;
*p2=t;

你上面的操作不过是把p1指向了b,p2指向了a.

p1 p2开始分别指向a,b
交换一下 就是p1p2分别指向b,a

如果 printf("%d %d\n",*p1,*p2);输出就是2 1
printf("%d %d\n",a, b);就输出 1 2了

只是改变了 p1 和p2 所指向的地址 但是地址所对应的数没变

你把t设为普通变量试试~