上大学的时候C语言的老师说,指针就像房间的钥匙,拿到了钥匙(指针),你就可以进入这个房间(参数所在的地址),对房间内的布局做出改动(对参数的值进行操作和处理),在你离开房间的时候(函数执行结束),房间的布局就是你刚才布置的样子(参数保留了操作之后的结果)。这就是函数的地址传递,例如
int *x=&a;
int *y=&b;
void swap(int *x,int *y)
{
int t;t=&x;&x=&y;&y=t;
}
在函数结束后,参数x和y指代的a和b变量的值确实发生了交换。(拿到钥匙,进房间布置,出来)
但是如果是值传递的话,
int x=a;
int y=b;
void swap(int x,int y)
{
int t;t=x;x=y;y=t;
}
函数执行结束之后,函数内形参x和y的值确实交换了,但是函数结束后,形参x和y的地址就被释放了,在函数外代表a和b的x和y并没有交换。
(先寻找一个和a,b所在的房间一模一样的房间,在那个房间里布置,出来之后,a和b这个房间的格局并没有改变。)
因此,在需要批量操作变量并且要保存结果的时候,比如要对数组批量操作的时候,传递钥匙比复制整个房间更合适。 |