函数的调用:形参与实参

来源:互联网 发布:手机简谱制作软件 编辑:程序博客网 时间:2024/04/28 08:20

我曾经写过这样一个用于交换两个变量的函数:

#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);
0 0