c语言入门第4节,制作可以变形的积木,函数的形参和实参

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


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)。


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);
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 函数在执行完毕后,它所在的内存就被收回了。关于这一点,《》一节说的非常清楚,可以再回顾一下。

image

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文地址:C语言函数调用栈(一)C语言函数调用栈(二) 0 引言 程序的执行过程可看作连续的函数调用。当一个函数执...
    小猪啊呜阅读 4,727评论 1 19
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,966评论 0 38
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,679评论 0 5
  • 第5章 函数和函数式编程 5.1 引言函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数...
    VIVAFT阅读 990评论 0 5
  • 1、c语言的函数有以下特点: (1)才源程序由函数组成,一个主函数main()+若干其他函数 C程序中的函数类似文...
    滕王阁序阅读 1,385评论 0 6