我曾经写过这样一个用于交换两个变量的函数:
#include <cstdio>
using namespace std;
int a[1001];
void swap(int x,int y ) //错误!!!
{
int t;
t = x;
x=y;
y=t;
}
int main()
{
a[0]=1,a[1]=2;
swap(a[0],a[1]);
printf("%d %d",a[0],a[1]);
return 0;
}
运行后发现并没有起到应有的功能。事实上形参把实参的数据复制过来后,确实交换了,但没有返回值,形参的值也不传递给实参(参数的传递是单向值传递)。主函数中的值并没有发生改变。
a[0]、a[1]实质上只把值传递给了交换函数,换来换去只是a、b两个值交换了。主函数中由于数组是全局变量因此可以用下面这种方法:
#include <cstdio>
using namespace std;
int a[1001];
void swap(int x,int y )
{
int t;
t = a[x];
a[x]=a[y];
a[y]=t;
}
int main()
{
a[0]=1,a[1]=2;
swap(0,1);
printf("%d %d",a[0],a[1]);
return 0;
}
传递的是俩个下标,在交换函数中交换的却是全局变量a[0]与a[1]。
也可以用指针来传递地址,然后把该地址存储的值交换:
#include <cstdio>
using namespace std;
int a[1001];
void swap(int *x,int* y )
{
int t;
t = *x;
*x=*y;
*y=t;
}
int main()
{
a[0]=1,a[1]=2;
swap(&a[0],&a[1]);
printf("%d %d",a[0],a[1]);
return 0;
}
调用函数传递实参也可以这样写:
swap(a,a+1);