C语言函数的定义与调用-传值与传址

如何定义函数

定义函数的基本格式:

返回类型 函数名(函数参数)

{

函数体;

}

例如:定义一个两数相加的函数

int Add ( int x ,int y)

{

return x+y;

}

返回类型为:int

函数名为:Add

函数参数为:x,y

调用函数(传值)

例如:定义 比较两个数大小 的函数

#include <stdio.h>
//定义函数名为get_max的函数,函数返回类型为int整型,函数参数为x和y
//定义函数
int get_max(int x , int y)
{
    if(x>y)
        return x;//如果x>y,说明x比较大,返回x
    else
        return y;//否则返回y
}
int main ()
{
    int a = 10;
    int b = 20;
    //调用函数get_max,比较大小,返回较大的值
    //调用函数
    int max = get_max(a,b);//定义max,并将返回的最大值存入max
    printf("%d",max);//打印max
    return 0;
}

执行结果为:

注意:程序是从main函数开始运行,main函数结束运行

x与y是形参(也就是形式参数,不分配存储空间,形参变量只有在被调用时才分配内存单元,且与实参不一样,在调用结束后,就会释放所分配的内存单元)

a与b是实参,将a传给x,b传给y

x得到a的值10,b得到y的值20,执行函数体的内容,返回20。存入max

调用函数(传址)

定义一个函数,实现两个值的互换 ,利用上面的方法,试一试能不能实现

#include<stdio.h>
//定义函数名为swap的函数,函数返回类型为void空,函数参数为x和y
void swap(int x,int y)
{
    int temp;
    temp = x;
    x = y;
    y = temp;//实现将x与y的值互换
}
int main()
{
    int a = 10;
    int b = 20;
    printf("a=%d b=%d \n",a,b);//互换前打印a与b的值
    swap(a,b);
    printf("a=%d b=%d",a,b);//互换后打印a与b的值
    return 0;
}

运行结果为:

我们发现,a与b的值并没有成功互换。

因为,我们使用的是普通变量调用,也就是值调用。参数的传递是从实参变量到形参变量的单方向传递,在函数swap中实现了x与y的交换,当swap函数执行完,swap中定义的变量被销毁,回到主函数后,a和b没有受到任何影响

改为传址的方式

修改为:

#include<stdio.h>
//定义函数名为swap的函数,函数返回类型为void空,函数参数为x和y
void swap2(int *x,int *y)//形参与实参的类型需一致,使用指针接收地址
{
    int temp;
    temp = *x;//调用函数时,*x 代表的就是a的值 ,*y 代表的就b的值
    *x = *y;
    *y = temp;
}
int main()
{
    int a = 10;
    int b = 20;
    printf("a=%d b=%d \n",a,b);//互换前打印a与b的值
    // swap(a,b);
    swap2(&a,&b);//将a与b的地址传入函数
    printf("a=%d b=%d",a,b);//互换后打印a与b的值
    return 0;
}

运行结果为:

在函数swap2被调用时,将实参a、b的地址值传入x、y。

x与y中分别存放的是a和b的地址,由于*x与a代表的是同一存储单元只要*x改变了,那么也就改变了a存储单元的内容。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值