函数的调用:形参与实参

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

#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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值