day4:函数的传参

函数的传参类型:

值传参

地址传参

1.值传递

#include <stdio.h>
#include <stdlib.h>

int printf_value(int a,int b)
{
   printf("%d,%d\n",a,b);
   return 0;
}

int main()
{
    int i = 3,j=5;

    printf_value(i,j);
    return 0;
}

值传参方法比较简单,使用形式参数的方法传入参数,有c语言基础的基本都不难理解,但是它也存在缺点,我们直接举个例子:

#include <stdio.h>
#include <stdlib.h>

void swap(int i,int j)
{
    int temp;
    temp=i;
    i=j;
    j=temp;
}

int main()
{
    int i = 3,j=5;
    int temp;
    swap(3,5);
    printf("i=%d,j=%d\n",i,j);
    return 0;
}

上面代码意图是使用swap()函数交换i和j的值,使用的是值传参的方法。但是编译的结果是:

 i=3,j=5

代码并没交换两个值!

原因是在执行swap()函数时,交换的是swap()的形式参数,(函数在结束调用时形式参数就被销魂了)对main()而言,i和j的值根本就没有发生变化!

2.地址传递        

        对于上述的问题,我们可以使用指针传递参数,即地址传参。方法如下:

#include <stdio.h>
#include <stdlib.h>

void swap(int *i,int *j)
{
    int temp;
    temp=*i;
    *i=*j;
    *j=temp;
}

int main()
{
    int i = 3,j=5;
    int temp;
    swap(&i,&j);
    printf("i=%d,j=%d\n",i,j);
    return 0;
}

输出结果:i=5,j=3

3.总结:

        地址传参和值传参是常用的传参方式,但是两者也存在区别。使用值传参,函数会开辟一个新的空间给形参,实参传入给形参的值,会传入到新的空间储存,不会影响实参的值。如果使用地址传参,其实传递进来的是实参的地址,并不会开辟新的储存空间,会直接作用得到原来的实参中,从而改变实参的值。

  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值