函数的详解

目录

1. 函数的概念

2. 库函数

2.1 库函数的概念

2.2 标准库和头文件

2.3 库函数的使用方法

2.4 头文件包含

2.5 库函数文档的一般格式

3. 自定义函数

3.1 函数的与法形式

3.2 函数举例

4. 实参和形参

4.1 实参

4.2 形参

5. return 语句

6. 嵌套调用和链式访问

6.1 嵌套调用

6.2 链式访问


1. 函数的概念

数学中函数的概念:它描述了一个输入值与一个或多个输出值之间的对应关系。比如:一次函数 y=kx+b ,k和b都是常数,给一个任意的x,就得到一个y值。

其实在C语言也引入函数(function)的概念,有些翻译为:子程序,子程序这种翻译更加准确一些。 C语言中的函数就是⼀个完成某项特定的任务的一小段代码。这段代码是有特殊的写法和调用方法的。

在C语言中我们一般会见到两类函数:  库函数和自定义函数。

2. 库函数

2.1 库函数的概念

C语言标准中规定了C语言的各种语法规则,C语言并不提供库函数;C语言的国际标准ANSIC规定了一 些常用的函数的标准,被称为标准库,那不同的编译器厂商根据ANSIC提供的C语言标准就给出了一系列函数的实现。这些函数就被称为库函数。

2.2 标准库和头文件

各种编译器的标准库中提供了一系列的库函数,这些库函数根据功能的划分,都在不同的头文件中进行了声明。

库函数相关头文件:https://zh.cppreference.com/w/c/header

2.3 库函数的使用方法

参考:

C/C++官方的链接:https://zh.cppreference.com/w/c/header

cplusplus.com:https://legacy.cplusplus.com/reference/clibrary/

2.4 头文件包含

库函数是在标准库中对应的头文件中声明的,所以库函数的使用,务必包含对应的头文件,不包含头文件是可能会出现⼀些问题的。

举例:16的开方(sqrt是开方的意思)

未包含sqrt的头文件:#include <math.h> (sqrt是开方的意思)

包含头文件,该程序就正常运行了。

2.5 库函数文档的一般格式

1. 函数原型

2. 函数功能介绍

3. 参数和返回类型说明

4. 代码举例

5. 代码输出

6. 相关知识链接

3. 自定义函数

3.1 函数的与法形式

lin_type 是函数返回类型

 fun_name 是函数名

 括号中放的是形式参数

 {}括起来的是函数体

3.2 函数举例

例子:写一个加法函数,完成2个整型变量的加法操作

我们根据要完成的功能,给函数取名:Add,函数Add需要接收2个整型类型的参数(int x,int y),函数计算的结果也是整型(int)。

4. 实参和形参

使用函数的过程中,把函数的参数分为实参和形参。

如刚刚的代码:

4.1 实参

我们把第15行调调Add函数时,传递给函数的参数a和b,称为实际参数,简称实参。

实际参数就是真实传递给函数的参数。

4.2 形参

在上面代码中,第24定义函数的时候,在函数名 Add 后的括号中写的 x 和 y ,称为形式参数,简称形参。

为什么叫形式参数呢?

实际上,如果只是定义了 Add 函数,而不去调用的话, Add 函数的参数 x 和 y 只是形式上存在的,不会向内存申请空间,不会真实存在的,所以叫形式参数。

4.3 实参和形参的关系

实参和形参之间是有联系的,但是形参和实参是独立的内存空间。

我们在调试的时候可以观察到,x和y确实得到了a和b的值,但是x和y的地址和a和b的地址是不一样的,所以我们可以理解为形参是实参的⼀份临时拷贝

5. return 语句

函数return语句使用的注意事项:

1 return后边可以是一个数值,也可以是一个表达式,如果是表达式则先执行表达式,再返回表达     式的结果

 2 return后边也可以什么都没有,直接写 return; 这种写法适合函数返回类型是void的情况。

3  return语句执行后,函数就彻底返回,后边的代码不再执行

4  如果函数中存在if等分句的语句,则要保证每种情况下都有return返回,否则会出现编译错误。

6. 嵌套调用和链式访问

6.1 嵌套调用

嵌套调用就是函数之间的互相调用

例子:

这段代码中有不少函数调用

main函数调用了line1, line2 和line3

line3函数调用了line4函数

6.2 链式访问

链式访问就是将一个函数的返回值作为另外一个函数的参数,像链条一样将函数串起来就是函数 的链式访问

例子:

#include <stdio.h>
int main()
{
 printf("%d", printf("%d", printf("%d", 43)));
 return 0;
}

第一个printf打印的是第二个printf的返回值,第二个printf打印的是第三个 printf的返回值。

第三个printf打印43,在屏幕上打印2个字符,再返回2。

第二个printf打印2,在屏幕上打印1个字符,再返回1。

第⼀个printf打印1。

所以屏幕上最终打印:4321

  • 41
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值