我们知道,调用子函数可以通过形参改变实参的值(传址,归根结底是传值。)。通过子函数返回值也可以达到子函数改变主函数参数的目的。而现在将两种方式结合在一起,通过一个子函数,来实现形参改变实参和返回一个值这两个目的。例子:
#include "iostream"
using namespace std; //如果头文件是iostream.h则不需要此句
int Change(int *p);
int Change(int b[]);
void main()
{
int a[] = {1, 2, 3};
cout<<"before change a[0] is :"<<endl;
cout<<a[0]<<endl;
int back;
back = Change(a); //获取子函数返回值,同时通过形参改变实参的值
cout<<"the func change return is :"<<endl;
cout<<back<<endl;
cout<<"after change a[0] is :"<<endl;
cout<<a[0]<<endl;
}
#if 0
int Change(int *p) //方法一:用指针传址
{
int c;
c = *p;
*p = *(p + 2);
*(p + 2) = c;
return 1;
}
#endif
int Change(int b[]) //方法二:用数组名传址(用数组名传递时,将自动转化为指针)
{
int c;
c = b[0];
b[0] = b [2];
b[2] = c;
return 1;
}
注:代码中用到调试开关,将0改为1则可以试验第一种方法。