用传值的方式无法实现两个数据的交换。用指针作为形参,从实参传入要交换数据的地址,在函数体内将指针指向的两个数据交换存储位置,这样就可以通过“釜底抽薪”的方式实现了数据交换。为了实现不同的数据交换,形式参数采用void指针。
#include <iostream>
using namespace std;
int swap(int *num1,int *num2) //定义一个函数交换整形数据
{
int t;
t = *num1;
*num1 = *num2;
*num2 = t;
}
void swap(void *num1,void *num2,int size)//定义一个函数可以实现所有类型数据的交换
{
char *first = (char *)num1;
char *second = (char *)num2;
int t;
for(int i=0;i<size;i++)
{
t = first[i];
first[i] = second[i];
second[i] = t;
}
}
int main()
{
int a = 4;
int b = 8;
cout<<"before a,b"<<"a="<<a<<"b="<<b<<endl;
swap(&a,&b);
cout<<"after a,b"<<"a="<<a<<"b="<<b<<endl;
char c1[8] = "china";
char c2[8] = "usa";
cout<<"before c1,c2"<<"c1="<<c1<<"c2="<<c2<<endl;
swap(&c1,&c2,sizeof(c1));
cout<<"after c1,c2"<<"c1="<<c1<<"c2="<<c2<<endl;
return 0;
}
运行结果:
常用的指针作为形参接受指针,数组作为实参传过来的地址,在函数体内,可以使用数组,指针形式存取实参的值。