关键字与变量、函数之间的相互作用
2019-01-29 本文已影响1人
silasjs
目录
[toc]
局部变量
1. 概念
局部变量就是定义在函数,代码块和函数形参列表中的变量,我们就称之为局部变量
2. 作用范围
从定义的哪一行开始一直到遇到大括号结束或者遇到return为止
3. 特点:
- 相同作用范围内不能出现同名的局部变量
- 不同作用域范围内出现同名的局部变量,内部的局部变量会覆盖外部的局部变量
4. 注意:
- 局部变量没有固定的初始化值,如果没有对局部变量进行初始化,那么局部变量中是一些随机的值,所以在开发中千万不要使用未初始化的局部变量
5. 存储位置
局部变量存储在栈中,当作用域结束系统会自动释放栈中的局部变量
全局变量
1. 概念
写在函数,代码块,形参列表外的变量,我们就称之为全局变量
2. 作用范围
从一定的那一行开始一直直到文件末尾(暂时这样认为)
3. 特点
- 全局变量和局部变量可以同名
- 如果存在和全局变量同名的局部变量,那么局部变量会覆盖全局变量
4. 注意:
全局变量如果没有进行初始化,那么系统默认会将全局变量初始化为0
5. 存储位置
全局变量存储在静态区中,它会随着程序的启动而创建,随着程序的结束而结束
外部全局变量和内部全局变量
全局变量分为两种:
- 外部全局变量:
- 概念:可以被其他文件访问的全局变量,默认情况下所有的全局变量都是外部全局变量
- 特点:
- 可以定义同名的外部全局变量
- 多个同名的外部全局变量指向同一块存储空间
为了提高数据的安全性,不让别人在其他文件中修改我们的全局变量,C语言提供了另外一个用于修改全局变量的关键字:static
只要用static修饰的全局变量就是内部全局变量,只能在当前文件中使用,这样就可以提高我们全局变量的安全性
- 内部全局变量:
- 概念:只能被当前文件访问的全局变量。只要给全局变量加上static关键字就是内部全局变量
- 特点:
- 也可以定义多个同名的内部全局变量
- 多个同名的内部全局变量如果不在同一个文件中,那么指向不同的存储空间
- extern:用于声明一个外部全局变量,声明不会开辟存储空间,声明只需要在使用变量之前就行了。
- static:用于定义一个内部全局变量,定义会开辟存储空间
static对局部变量的作用
当使用static来修饰局部变量,那么会延长局部变量的生命周期, 并且会更改局部变量存储的位置,将局部变量从栈转移到静态区中。
只要使用static修饰局部变量后,当执行到定义局部变量的代码就会分配存储空间,但是只有程序结束才会释放该存储空间。
static和extern对函数的作用
static对函数的作用
-
函数也分为内部函数和外部函数,默认情况下所有的函数都是外部函数
- 外部函数:可以被其他文件访问的函数
- 内部函数:只能在当前文件中访问的函数
-
只要在函数的返回值前面加上static就可以让函数变为内部函数,其他文件就不能访问了
- 如果static写在函数的实现中,代表定义一个内部函数
- 如果static写在函数的声明中,代表声明一个内部函数。(在.h中声明一个内部函数没有意义)
extern对函数的作用
- 只要在函数的返回值前面加上extern就可以让函数变为一个外部函数,由于默认就是外部函数,所以在开发中一般情况下extern没人写
- 如果extern写在函数的实现中,代表定义一个外部函数
- 如果extern写在函数的声明中,代表声明一个外部函数