引子:要写一个函数来交换俩变量a和b的值,可以定义指向a的指针pa,和指向b的指针pb,此时便可以向调用函数中传递地址,函数中的形参根据地址进行运算就可以直接影响实参。
具体实现函数可以为:
void swap(int *p1,int *p2)
{
int box;
box=*p1;
*p1=*p2;
*p2=box;
}
运行时,实参pa,pb的值被复制传给形参p1,p2
借助取值运算符“*”,swap函数便可根据形参中的地址直接访问a和b,从而直接交换了俩实参的值。
同理,如果要写一个函数来交换上述两个已被赋值的指针pa和pb的指向(使pa指向b,pb指向a),即交换两个指针变量的值,需要用指针的指针来对指针变量自身的地址进行传递,
按照如上操作方法,实现的函数应该为:
void swap(int **p1,int **p2)
{
int box;
box=**p1;
**p1=**p2;
**p2=box;
}
但是如果把函数写为如下,也可以达到交换指针变量pa,pb值的效果:
void swap(int **p1,int **p2)
{
int *box;
box=*p1;
*p1=*p2;
*p2=box;
}
我的问题来了:
这个函数操作,难道不是只对形参(*p1)和形参(*p2)进行了值的交换而并未影响到实参吗,但实际上这个函数已经达到目的了,为什么?