想知道指针是怎么实现对实参进行交换的(C++)

来源:百度知道 编辑:UC知道 时间:2024/05/22 04:20:32
#include "stdafx.h"
#include <iostream>
using namespace std;

void change(int * p,int * q)
{
int t;
t=*p;*p=*q;*q=t;
}
void main()
{
int a=5,b=10;
change(&a,&b);
cout<<a<<" "<<b<<endl;
}

我突然想不明白,指针是如何对 实参进行交换的?

指针就是地址,在主函数中传参数的时候将变量a和b的地址传进函数change,形参p和q就分别得到二者的地址,而*p和*q则是对指针所指向的内存中的数据的操作,因此对*p和*q的改变即为对a和b的改变,因此达到了交换的目的。
而形参设定为两个整型数据的话,传递时只是将a和b的值传递给了函数change,在函数change内进行交换的是两个形参,而在函数change结束后系统自动将为两个形参分配的内存释放,因此对a和b无法实现交换。

指针是一个地址, 实参传递给形参的时候传递的是这个变量的地址,所以函数在拿到这个地址后可以通过这个地址找到这个变量,进行赋值。

就好比你家就在那,你给我的是你家的地址,我通过这个地址找到你家给你塞东西。

你把变量想象成一个容器,然后这个容器是放在内存的某一个地方,这个地方会有一个地址,就是内存的地址,指针实际上记的就是这个内存地址。

指针就是一个小旗,在一堆数据里,谁拿着它主程序和函数都可以看到,所以可以直接调用。使用变量传递到函数是系统自动复制一份,所以已经不是原来的变量,你修改后也不影响原来调用的变量。