C语言学习---函数2

我们之前已经了解了有关函数的一些知识,今天继续学习!

函数的定义和声明

单个文件

函数必须先声明后使用

第一种方法

其实函数的定义也是一种特殊的声明,所以第一种方法就是将定义函数放在主函数之前,这样就可以直接使用

第二种方法

如果我们想把函数的定义放在主函数之后又该怎么做呢

 

函数的声明要交代清楚函数名,函数的返回类型和函数的参数(参数也可以只保留类型,省去参数名) 。就好比你想使用一件物品,你可能不需要知道它是如何运作的(这就是声明时不写函数体的原因),但是你首先就得了解它的名字,用途和使用它所需要的条件吧。

函数的声明也不是必须要放在最前面,只需要在使用它之前声明就好了。

多个文件

当我们写的代码比较多的时候,不会将所有代码都放在一个文件中,往往会根据程序的功能,将代码放在多个文件中。一般情况下,我们将函数的声明和类型的声明放在头文件中(.h),函数的实现是放在源文件中(.c)

函数的作用域和生命周期

作用域

通常来说,一段代码中所用到的名字并不总是有效的,而限定这个名字的可用性代码范围就是这个名字的作用域。

1.局部变量的作用域是变量所在的局部范围 ,我们也可以理解为C语言中的{}限定了变量的作用范围

2.全局变量的作用域是整个项目

也许你会有一个疑惑,是世界上同名同姓的人那么多,光听名字叫人无法分辨谁是谁,如果函数中的全局变量和局部变量也发生这样的情况,会不会感到疑惑呢? 

生命周期

局部变量的生命周期:进入作用域变量创建,生命周期开始,出作用域时生命周期结束

全局变量的生命周期:整个程序的生命周期

static和extern

static和extern是C语言中的两个关键字

extern

extern的作用是声明外部符号的,方便跨文件使用

static

顾名思义,static是静态的意思,有三个作用

static修饰局部变量

为什么会出现这样的情况呢,现在逐个分析

代码1:在test函数中的a创建好后 ,出函数时是不会被销毁的。进入函数也不会重新创建变量,直接累积上次的值进行计算

代码2:test函数中的局部变量i是每次进入函数时创建并赋值的变量(这是它生命周期的开始),然后出函数时它的生命周期结束(释放内存)

由此我们可以得出结论:

static修饰局部变量改变了变量的生命周期,生命周期的改变的本质是改变了变量的存储类型。本来局部变量是存储在内存的栈区的,但是被static修饰后存储到了静态区。存储在静态区的变量和全局变量是一样的,因此生命周期和程序的生命周期是一样的,只有程序结束,变量才会被销毁,内存才回收。但需要注意的是,作用域是不变的。

static修饰全局变量

全局变量默认具有外部链接属性的,在外部文件想要使用,只要适当的声明就可以使用。而在用static修饰后,外部链接属性就变成了内部链接属性,使得这个全局变量只能自己所在的源文件中使用,如果在其他文件中声明依旧无法使用。

以下是一个具体例子:

static修饰函数

static修饰函数的情况与全局变量的情况一样。本质上是因为函数默认有外部链接属性,这使得函数在整个工程中只要有适当的声明就可以被使用。但是被static修饰后就变成了内部链接属性,是得函数只能在自己源文件内部使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值