void swap(int *x,int *y)
{
}
void swap2(int **m,int **n)
{
int *x;
x=*m;
*m=*n;
*n=x;
}
void main()
{
int a=1,b=2,*p=&a,*q=&b;
swap(p,q);
printf("%d,%d,%d,%d\n",a,b,*p*q);
swap2(&p,&q);
printf("%d,%d,%d,%d\n",a,b,*p*q);
}
int *p=&a,变量p中存放的是a的地址,p=&a,解引用之后,*p=a
对于二级指针
int **m=&p,表示变量m中存放的是p的地址,m=&p,*m=p,*m=&a
m带上两个*号也是表示m是一个指针变量,只不过m中放的这个变量的地址,这个变量本身也是一个地址
如上将p的地址传入进去,如果下述操作对p的地址中存放的值发生更改,
(p的地址用m变量表示,p的地址中的值通过解引用*m来表示)
也就是传进来的是p的地址,地址中的值*m发生了改变,相当于主函数中的该地址中的值会发生改变
这个是地址传参
那么主函数中 p的地址中的值也会发生改变
x=*m;
*m=*n;
*n=x;
地址中的值发生改变,即&a=&b,&b=&a
a变量指向b变量的地址,所以a,b值互换
所以对于这种题,如果传进来的是一个地址,那么找程序中有没有对该地址中的值进行操作的步骤