程序一
#include<stdio.h>
void fun(int *a,int *b)
{int *c;
c=a;a=b;b=c;
}
void main()
{int x=3,y=5,*p=&x,*q=&y;
fun(p,q);printf("%d,%d ",*p,*q);
fun(&x,&y);printf("%d,%d\n",*p,*q);
}
程序二
#include<stdio.h>
void swap(int *p,int *q)
{int t;
t=*p;
*p=*q;
*q=t;
}
main()
{int x,y,t;
scanf("%d%d",&x,&y);
swap(&x,&y);
printf("%d,%d\n",x,y)
请问为什么程序而可以实现两数交换,而一不可以?不都是指针吗??求解求解
请问,我怎么判断是指针指向地址值的改变?
追答对指针直接赋值就是改变他的指向
这类问题我都回答烦了,解释半天原理还是解释不清楚。这次不求采纳,干脆直接给一个实践性的建议好了:
C语言里,如果一个函数中存在修改参数的语句(不管参数是什么类型),例如下面这样
而且你的本意确实是想对参数本身进行修改,那就直接在该参数上加一级指针,修改成如下:
即便那个参数本身就是个指针,如果有对该指针本身的修改,就依然遵照上述规则进行代码修正。例如:
void foo(...,int ****a,...){应修正为: