当前位置: 首页 > ops >正文

【时时三省】(C语言基础)调用函数

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省

定义函数的目的是为了调用此函数,以得到预期的结果。因此,应当熟练掌握调用函数的方法和有关概念。

函数调用的形式

调用一个函数的方法很简单,如前几篇见过的:

print_star ( );/ /调用无参函数

c = max ( a , b );/ /调用有参函数

函数调用的一般形式为

函数名(实参表列)

如果是调用无参函数,则“实参表列”可以没有,但括号不能省略,如果实参表列包含多个实参,则各参数间用逗号隔开。

按函数调用在程序中出现的形式和位置来分,可以有以下3种函数调用方式。

1.函数调用语句

把函数调用单独作为一个语句。如前几篇里的“printf_star ( );”,这时不要求函数带向值,只要求函数完成一定的操作。

2.函数表达式函数

调用出现在另一个表达式中,如“c = max ( a,b );”,max ( a,b )是一次函数调用,它是赋值表达式中的一部分。这时要求函数带回一个确定的值以参加表达式的运算。例如:

c = 2 * max ( a , b ) ;

3.函数参数

函数调用作为另一个函数调用时的实参。例如:

m = max ( a,max ( b , c ) );

其中,max ( b,c )是一次函数调用,它的值是b和c二者中的“大者”,把它作为max另一次调用的实参。经过赋值后,m的值是a,b,c三者中的最大者。又如:

printf ( " % d”, max ( a,b ) );

也是把max ( a,b )作为printf函数的一个参数。

说明:调用函数并不一定要求包括分号(如print star();),只有作为函数调用语句才需要有分号。如果作为函数表达式或函数参数,函数调用本身是不必有分号的。不能写成

printf ( " % d " , max ( a , b ););

/ /max ( a,b )后面多了一个分号

函数调用时的数据传递

1.形式参数和实际参数

在调用有参函数时,主调函数和被调用函数之间有数据传递关系。从前面已知:在定义函数时函数名后面括号中的变量名称为“形式参数”(简称“形参”)或“虚拟参数”。在主调数可以是常量、变量或表达式。函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”(简称“实参”)。实际参数可以是常量,变量或表达式。

2.实参和形参间的数据传递

在调用函数过程中,系统会把实参的值传递给被调用函数的形参。或者说,形参从实参得到一个值。该值在函数调用期间有效,可以参加该函数中的运算。

在调用函数过程中发生的实参与形参间的数据传递称为“虚实结合”。

例题:

输入两个整数,要求输出其中值较大者。要求用函数来找到大数。

解题思路:

从两个数中找出其中的大者,现在的关键是要用一个函数来实现它。在定义函数时,要确定几个问题:

( 1 )函数名。应是见名知义,反映函数的功能,今定名为max。

( 2 )函数的类型。由于给定的两个数是整数,显然其中大者也是整数,也就是说max函数的值(即返回主调函数的值)应该是整型。

( 3 ) max函数的参数个数和类型。max函数应当有两个参数,以便从主函数接收两个整数,显然,参数的类型应当是整型。在调用max函数时,应当给出两个整数作为实参,传给max函数中的两个形参。

编写程序:

运行结果:

程序分析: 

先定义max函数(注意第1行的末尾没有分号)。第1行定义了一个函数,名为max,函数类型为int。指定两个形参x和y,形参的类型为int。

主函数中包含了一个函数调用max ( a,b )。max后面括号内的a和b是实参。a和b是在main函数中定义的变量,x和y是函数max的形式参数。通过函数调用,在两个函数之间发生数据传递,实参a和b的值传递给形参x和y,在max函数中把x和y中的大者赋给变量z,z的值作为函数值返回main函数,赋给变量c。

说明:

( 1 )实参可以是常量、变量或表达式,例如:max ( 3,a + b ),但要求它们有确定的值。在调用时将实参的值赋给形参。

( 2 )实参与形参的类型应相同或赋值兼容。上例中实参和形参的类型相同,都是int型,这是合法的、正确的。如果实参为int型而形参x为float型,或者相反,则按不同类型数值的赋值规则进行转换。例如实参a为float型变量,其值为3.5,而形参x为int型,则在传递时先将实数3.5转换成整数3,然后送到形参x。字符型与int型可以互相通用。

http://www.xdnf.cn/news/7915.html

相关文章:

  • clock的时钟频率check代码
  • vue之混入mixin
  • 禾纳EAT3152AP MOS电源芯片PIN TO PIN替代泰德TDM3307/2307方案
  • DDoS防护实战——从基础配置到高防IP部署
  • 86.评论日记
  • 二进制编码、定点数与浮点数
  • 【版本控制】Perforce P4服务器安全配置指南(附常见漏洞、详细配置参数)
  • IEEE Transactions on Wireless Communications 2025年1月-5月论文速览
  • 深入理解 Python 的with语法:资源管理的优雅解决方案
  • C++:array容器
  • Linux 内核探秘:从零构建 GPIO 设备驱动程序实战指南
  • MySQL主键与外键详解:数据关系的基石与守护者
  • 助力 FPGA 国产化,ALINX 携多款方案亮相深圳、广州“紫光同创 FPGA 技术研讨会”
  • 【时时三省】Python 语言----文件
  • java 通过IO控制台输入内容写入到文本当中
  • SQL窗口函数破解:如何优雅获取各分组极值
  • docker中部署Universal Media Server (UMS)
  • Go语言打造:超高性能分布式唯一ID生成工具
  • 关于FPGA 和 ASIC设计选择方向的讨论
  • VoiceFixer语音修复介绍与使用
  • 软件工程(六):一致性哈希算法
  • 【Redis】AOF日志的三种写回机制
  • 一文详解并查集:从基础原理到高级应用
  • MAYA 转换为 STP:深度技术解析与全流程实践指南
  • OpenCV CUDA模块特征检测与描述------创建一个 盒式滤波器(Box Filter)函数createBoxFilter()
  • GPU P-State 模式说明
  • MCP入门介绍
  • 【VS2017】cpp 文件字符编码方式转换
  • 进阶知识:理解函数装饰器@wraps()的返回值逻辑 和 闭包的深度解析
  • 力扣热题100, 力扣.167两数之和II 力扣80.删除有序数组中的重复项力扣99.恢复二叉搜索树力扣.110平衡二叉树