首页 > 代码库 > C语言学习入门 (七) 变量与函数,static和extern关键字
C语言学习入门 (七) 变量与函数,static和extern关键字
局部变量
1> 定义:在函数内部定义的变量,称为局部变量。形式参数也属于局部变量。
2> 作用域:局部变量只在定义它的函数内部有效,即局部变量只有在定义它的函数内部使用,其它函数不能使用它。
全局变量
1> 定义:在所有函数外部定义的变量,称为全局变量。
2> 作用域:全局变量的作用范围是从定义变量的位置开始到源程序结束,即全局变量可以被在其定义位置之后的其它函数所共享。
变量的存储类型
C语言根据变量的存储类型(变量存储的位置:1. 运行时堆栈 2.普通内存 3.寄存器)的不同,
可以把变量分为:自动变量、静态变量、寄存器变量
> 哪些是自动变量:被关键字auto修饰的局部变量都是自动变量,但是极少使用这个关键字,
基本上是废的,因为所有的局部变量在默认情况下都是自动变量。存在堆栈
> 哪些是静态变量: 存在内存,程序结束才销毁
- 所有的全局变量都是静态变量
- 被关键字static修饰的局部变量也是静态变量
> 哪些变量是寄存器变量:
- 被关键字register修饰的自动变量都是寄存器变量
- 只有自动变量才可以是寄存器变量,全局变量和静态局部变量不行
- 寄存器变量只限于int、char和指针类型变量使用
extern与函数
- 外部函数:如果在当前文件中定义的函数允许其他文件访问、调用,就称为外部函数。C语言规定,不允许有同名的外部函数。
- 内部函数:如果在当前文件中定义的函数不允许其他文件访问、调用,只能在内部使用,就称为内部函数。
- C语言规定不同的源文件可以有同名的内部函数,并且互不干扰。
> extern修饰的函数就是外部函数,默认情况下,所有的函数就是外部函数 extern void one(); int two();
> 你想要把其他源文件中定义的外部函数拿过来声明,完整的做法,应该使用extern关键字,表示引用别人的"外部函数”:
extern void one();//需要 在 main() 之前引入, 这里的extern 也可以省略
static与函数
在定义函数时,在函数的最左边加上static可以把该函数声明为内部函数(又叫静态函数),
这样该函数就只能在其定义所在的文件中使用。如果在不同的文件中有同名的内部函数,则互不干扰。
extern与全局变量
> 默认情况下,一个函数不可以访问在它后面定义的全局变量,若要使它可以访问 则:
extern int a; //extern是用来声明一个已经定义过的变量
void cc() { a = 7; }
int a = 9;
> 声明多个 相同的全局变量 ,表示的是同一个变量 如:
int a;
main() {};
int a;
int a;
> 在局部变量前 加extern
int a;
main()
{
extern int a; //这还是全局变量那个 a
//int a; 这是局部变量
}
> 假如在多个源文件中都有全局变量int a;,那么这些源文件的所有全局变量int a;都代表着同一个变量
使用方法 1: 1.c int a 2.c int a
2: 1.c int a 2.c extern int a
3: 1.c extern int a 2.c int a
4: 1.c extern int a 2.c extern int a 这是错的,都声明,没有定义
static与全局变量
如果在定义全局变量的时候加上static关键字,此时static的作用在于限制该全局变量的作用域,
只能在定义该全局变量的文件中才能使用,跟其他源文件中的同名变量互不干扰
C语言学习入门 (七) 变量与函数,static和extern关键字