C语言全局变量做实参形,c语言入门第4节,制作可以变形的积木,函数的形参和实参...

上一节介绍了如何自己制作积木——定义自己的函数,并且给出了例子。应该能记得,上一节中自定义的函数既没有返回值,也没有参数,但是实际应用中,要解决复杂的问题,函数应该能够根据外界的输入做出相应的变化。例如,我们需要打印出 4+6 的值,函数可以如下定义:

14408eadb07b

image

void add()

{

printf("4+6=%d\n", 4+6);

}

的确,add 函数能够打印出 4+6 的值,解决了问题。但是,可能还会有类似,但不相同的问题出现,比如需要打印出 3+4 的值,这时上面定义的 add 函数就没有办法解决问题了,只能重新定义一个函数。这非常麻烦。事实上,C 语言中的函数可以接收外界传入的数据,我们如下修改 add 函数:

void add(int a, int b)

{

printf("%d+%d=%d\n", a, b, a+b);

}

这样,add 函数解决的就不是一个问题了,而是一类问题,打印 4+6 的值只需调用 add(4, 6),打印出 3+4 的值,只需调用 add(3, 4)。

14408eadb07b

image

形参和实参

在之前一节,我们介绍了全局变量和局部变量,知道了函数的参数也属于局部变量。在 C 语言中,函数的参数分为“形参”和“实参”,以上面定义的 add 函数为例,我们调用 add(4, 6) 时,函数中的参数 a 就代表 4,b 就代表 6。确切的说,当我们讨论函数中的 a 这个参数时,我们所说的“参数”是指“形参”,当我们讨论传一个参数 4 给函数时,我们所说的“参数”是指“实参”。

但是我习惯都叫参数而不习惯总把形参、实参这两个文绉绉的词挂在嘴边儿(事实上大多数人都不习惯),可根据上下文判断指的到底是形参还是实参。记住这条基本原理:形参相当于函数中定义的变量,调用函数传递参数的过程相当于定义形参变量并且用实参的值来初始化。

int main()

{

int p1 = 4, p2 = 6;

add(p1, p2);

return 0;

}

上面在 main 中调用了 add 函数,就相当于在 add 函数中执行了如下语句:

int a = p1;

int b = p2;

printf("%d+%d=%d\n", a, b, a+b);

14408eadb07b

image

main 函数的变量 p1 和 add 函数的参数 a 是两个不同的变量,只不过它们各自的存储空间中存了相同的值 4,因为变量 p1 的值赋给了参数 a。同理,变量 p2 的值赋给了参数 b。C语言中在调用函数时,每个参数都需要得到一个值,函数定义中有几个参数,在调用中就需要传几个参数,不能多也不能少,每个参数的类型也必须对应上。

事实上,C 语言中也定义了一些参数不定的函数,比如 printf,它可以接收 1 个或多个参数。以后遇到需要定义这样的函数时,再详细介绍。

易错点

请看如下代码:

void add(int a)

{

a=a+1;

}

int main()

{

int p = 2;

add(p);

printf("p=%d\n", p);

return 0;

}

该程序员原计划让 add 函数实现参数 p 加一,但是却失败了,以上代码输出的是 p=2。这是因为 add 函数中的参数 a 和 main 函数中的 p 根本就是两个变量。add 函数在执行完毕后,它所在的内存就被收回了。关于这一点,《》一节说的非常清楚,可以再回顾一下。

14408eadb07b

image

上一节,我们把自定义函数比作自己做积木,那自定义带参数的函数,就相当于制作可以变形的积木,更加灵活,所以能够完成更多工作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值