6.4.4 指针传递
要想被调函数改变调用函数中的变量值,应使函数中的操作直接作用在调用函数的变量上,要达到此目的,一个有效的途径就是使用指针传递,见代码6.7。
代码6.7 指针传递CallByPointer
<—————————————文件名:example607.cpp——————————————> 01 #include<iostream> 02 using namespace std; 03 int main() 04 { 05 void change(int,int);//change()函数声明,形参为指针 06 int x=2,y=3; 07 cout<<"交换前:x="<<x<<",y="<<y<<endl; 08 change(&x,&y);//change()函数调用,传递的是地址 09 cout<<"交换后:x="<<x<<",y="<<y<<endl; 10 return 0; 11 } 12 void change(intn,intm)//change()函数定义 13 { 14 int temp; 15 temp=*n; 16 n=m; 17 *m=temp; 18 }
输出结果如下所示。
交换前:x=2,y=3 交换后:x=3,y=2
【代码解析】代码第8行中的change()函数成功地实现了x和y之间的数据交换,将代码6.7与代码6.6比较可以发现,函数change()的形参是两个int型的指针,将调用函数(此处为main()函数)中的变量地址作为实参,赋值给形参,完成对调用函数中变量的处理。
在调用change()函数时,int型变量temp和形参(指针变量n和m)被创建,并用调用函数中的变量x和y的地址为n和m赋值,这时,间接引用n和m实际上等价于main()函数中的x和y,对n和m的操作实质上是对x和y的操作。这样,虽然在函数change()执行完毕后,变量temp和int型指针n和m都会被撤销,对应的内存区域被收回,但在函数执行过程中已经通过指针间接引用并改变了调用函数(此处为main()函数)中的变量。