分享

书上说C语言函数的参数分形参和实参两种,它们有什么分别?使用时要注意什么?

 山峰云绕 2019-06-14

谢邀。

在我之前的问答里,我介绍了怎样定义自己的函数,并且给出了例子。

C语言函数的参数

不过,示例自定义的函数既没有返回值,也没有参数,但是实际应用中,要解决复杂的问题,函数应该能够根据外界的输入做出相应的变化。

例如,我们需要打印出 4+6 的值,相关的C语言函数可以如下定义:

的确,add 函数能够打印出 4+6 的值,解决了问题。但是,可能还会有类似,但不相同的问题出现,比如需要打印出 3+4 的值,这时上面定义的 add 函数就没有办法解决问题了,只能重新定义一个函数,这就非常麻烦了。

事实上,C语言中的函数可以接收外界传入的数据,我们如下修改 add 函数:

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

C语言函数的“形参”和“实参”

看了我之前文章的朋友应该明白,函数的参数在某种意义上也属于局部变量,在 C 语言中,函数的参数分为“形参”和“实参”。

以上面定义的 add 函数为例,我们调用 add(4, 6) 时,函数中的参数 a 就代表 4,b 就代表 6。确切的说,当我们讨论函数中的 a 这个参数时,我们所说的“参数”是指“形参”,当我们讨论传一个参数 4 给函数时,我们所说的“参数”是指“实参”。

但是我习惯都叫参数而不习惯总把形参、实参这两个文绉绉的词挂在嘴边儿(事实上大多数人都不习惯),可根据上下文判断指的到底是形参还是实参。

记住这条基本原理:形参相当于函数中定义的变量,调用函数传递参数的过程相当于定义形参变量并且用实参的值来初始化。

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

main 函数的变量 p1 和 add 函数的参数 a 是两个不同的变量,只不过它们各自的存储空间中存了相同的值 4,因为变量 p1 的值赋给了参数 a。同理,变量 p2 的值赋给了参数 b。

C语言中在调用函数时,每个参数都需要得到一个值,函数定义中有几个参数,在调用中就需要传几个参数,不能多也不能少,每个参数的类型也必须对应上。

事实上,C 语言中也定义了一些参数不定的函数,比如 printf,它可以接收 1 个或多个参数。感兴趣的朋友可以关注我,查看我最新更新的文章和之前的文章。

易错点

现在再来说说C语言初学者使用函数时,经常容易犯的错误,请看下面的C语言代码:

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

关于这一点,我之前的问答已经解释的比较清楚,感到陌生的朋友,可以再回顾一下。

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

欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。

函数定义时候的参数列表里头的参数叫做形式参数,函数调用时候传入的参数叫做实际参数。如下代码:

int Add(int x, int y) { return x + y; }

Add(1, 2);

定义Add函数时候的x和y就是形参,调用Add函数时候的1和2就是实参。

形参相当于占位符,定义时因为不知道需要使用什么样的数据来进行操作,有可能是1和2,也有可能是2和3,所以需要使用形参代替实际的数据进行运算。

实参就是使用函数时候,告诉函数要用什么数据来代替形参进行运算,示例中形参a和b相加应该等于多少,显然是不可知的,但是在调用时候用实参依次替换形参,就可以知道a+b=1+2=3了。

使用时需要注意,形参是有数据类型的,函数内部可以对形参进行其数据类型允许的操作。而在调用函数的时候,也需要使用相同数据类型的实参进行替换,如果使用了不一样的类型,运行时会尝试对数据进行类型转换。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多