第七讲:函数(1)

1.库函数

1.1标准库和头文件

1.1.1标准库

c语言国际标准ANSIC C规定了一些常见的函数的标准,被称为标准库,不同的编译器厂商(c语言并不提供库函数)根据标准库给出的一系列函数的实现,这些函数就是库函数

1.1.2头文件

在各种库函数中,根据函数功能的划分,都被包含在不同的头文件中,在使用库函数时一定要包含他们的头文件

1.1.3库函数头文件的介绍

链接: c语言标准库头文件

1.2库函数的使用方法

Cplusplus链接:Cplusplus

1.2.1使用举例(sqrt函数)

在这里插入图片描述

2.自定义函数

2.1形参和实参

实参(实际参数)就是真实传递给函数的参数
形参(形式参数):
如果函数不被调用的话(例如Add(int x,int y)函数),x和y只是形式上存在的,形式参数只有在函数调用的过程中,为了存放实参传的值时,才向内存,这个过程称为形参的实例化
可以简单地说:形参实例化之后可以看作时实参的一份临时拷贝,但实参和形参是独立的内存空间

2.2return语句

注意:如果在自定义函数中出现了多个if语句,要保证每一种情况都具有返回值,否则会发生编译错误

3.函数的链式访问

3.1介绍

所谓链式访问就是将函数的返回值作为另一个函数的参数,像链条一样将函数串联起来就是函数的链式访问,例如:
在这里插入图片描述

3.2举例

下面有一个有意思的例子:
在这里插入图片描述
这个函数链式访问的结果是什么呢?编译之后我们会发现,结果为4321,不知道为什么的我们可以查一下printf这个函数的应用:
在这里插入图片描述
说明:printf的返回值是打印在屏幕上的字符的个数

4.函数的声明和定义

4.1一个文件

注意:函数在使用的过程中必须要满足:先声明后使用
而函数的定义就是一种特殊的声明

4.2多个文件

add.c

1	//函数的定义
2	int Add(int x, int y)
3	{
4 		return x+y;
5	}

add.h

1	//函数的声明
2	int Add(int x, int y);

test.c

1	#include <stdio.h>
2	#include "add.h"
3	int main()
4	{
5		int a = 10;
6		int b = 20;
7		//函数调⽤
8		int c = Add(a, b);
9		printf("%d\n", c);
10		return 0;
11	}

5.static和extern

5.1作用域和生命周期

作用域:通常来说,一串代码所使用的名字并不总是有效的,而限定这个名字所使用的代码范围就是这个名字的作用域
生命周期:指变量的创建(申请内存)(生命周期开始)到变量的销毁(收回内存)(生命周期结束)之间的一个时间段

5.2static修饰局部变量

在这里插入图片描述
对于这个程序,输出的是5个1,也就是11111
在这里插入图片描述
而这个程序输出的是12345,这是因为:

static修饰局部变量改变了局部变量的生命周期,其本质是改变了局部变量的存储类型,原来一个局部变量是存储在栈区的,在使用static修饰了之后存储在了静态区,存储在静态区的变量和全局变量是一样的,生命周期就成了程序的生命周期,但是它的作用域没变

5.3static修饰全局变量

  • 如果一个全局变量被static修饰,那么这个全局变量只能在这个全局变量存在的源文件内使用,不能在其它源文件中使用
  • 本质原因:
    是因为全局变量默认是具有内部链接属性的,在外部要想要使用,只需要声明就可以了:但是全局变量被static修饰之后,外部链接属性就编程了内部链接属性,只能在自己的源文件内使用

5.4static修饰函数

其实static修饰函数和static修饰全局变量的作用和本质是一样的,例如:
在这里插入图片描述
在add.c中的Add函数可以在test.c中使用,但是如果加上static之后:
在这里插入图片描述
Add函数就只能在add.c这个源文件中使用了

  • 16
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值