------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ———
一、全局变量和局部变量
根据变量的作用域,可以分为:局部变量、全局变量
1.局部变量:
1> 定义:在函数(代码块)内部定义的变量(包括函数的形参)
2> 作用域:从定义变量的那一行开始,一直到代码块结束
3> 生命周期:从定义变量的那一行开始分配存储空间,代码块结束后,就会被回收
4> 没有固定的初始值
2.全局变量
1> 定义:在函数外面定义的变量
2> 作用域:从定义变量的那一行开始,一直到文件结尾(能被后面的所有函数共享)
3> 生命周期:程序一启动就会分配存储空间,程序退出时才会被销毁
4> 默认的初始值就是0
3.全局变量和局部变量可以重名
#include <stdio.h>
extern int a; // 这里只是全局变量a的声明
extern int a; // 可以多次声明
int main()
{
int a; // 这个a是个局部变量
a = 10; // 这里的a和第8行是同一个a
return 0;
}
int a; // 这是一个全局变量,和第8、9行的a不是同一个a
4.全局变量可以重复定义
1)我们从下图可以看出,全局变量可以重复声明、重复定义,但不能重复定义且赋值
2)在多个文件中,全局变量同样可以重复定义。
你在一个源文件中无论写多少遍全局变量int a;,它们代表的都是同一个变量。
假如在另一个源文件中也有全局变量int a;,那么这两个源文件的所有全局变量int a;都代表着同一个变量。
二、static和extern关键字对变量的作用
1.extern声明全局变量
在C语言中,一个函数不可以访问在它后面定义的全局变量。
#include <stdio.h>
// 第一种办法:在函数前面定义a
int a;
int main()
{
a = 10;
return 0;
}
#include <stdio.h>
extern int a; // 这里只是a的声明
extern int a; // 这里只是a的声明,可以多次声明
int main()
{
a = 10;
return 0;
}
int a;
2.static定义私有全局变量
但很多时候,我们并不想让源文件中的全局变量跟其他源文件共享。
当你想定义一个相当于私有的全局变量,那么你就得用static关键字来定义变量。
int a;
test.c文件中
static int a;
这样写的效果是:main.c中的全局变量a是共有的,而test.c文件中的全局变量a是test.c私有的。
三、static和extern关键字对函数的作用
1.内部函数与外部函数
外部函数:如果在当前文件中定义的函数允许其他文件访问、调用,就称为外部函数。C语言规定,不允许有同名的外部函数。
内部函数:如果在当前文件中定义的函数不允许其他文件访问、调用,只能在内部使用,就称为内部函数。C语言规定不同的源文件。
2. extern声明、定义外部函数
#include <stdio.h>
extern void test(); // 声明外部函数test
int main()
{
return 0;
}
extern void test() // 定义外部函数test
{
printf("test");
}
其实, 函数前面什么都不写时,默认就是外部函数,所以 extern可以省略。
3. static声明、定义内部函数
有时候,我们可能想定义一个"内部函数”,也就是不想让其他文件访问本文件中定义的函数。
这时就可以用static定义一个内部函数,这个函数可以和其他文件的中的函数重名
#include <stdio.h>
static void test(); // 声明内部函数test
int main()
{
return 0;
}
static void test() // 定义内部函数test
{
printf("test");
}
小结:
默认情况下,一个全局变量是可以供多个源文件共享的,也就说,多个源文件中同名的全局变量都代表着同一个变量
对变量的作用:
1.static
如果在定义全局变量的时候加上static关键字,此时static的作用在于限制该全局变量的作用域,只能在定义该全局变量的文件中才能使用,跟其他源文件中的同名变量互不干扰
2.extern
extern可以用来声明一个全局变量,但是不能用来定义变量。extern可以省略。
1.static
》在定义函数时,在函数的最左边加上static可以把该函数声明为内部函数(又叫静态函数),这样该函数就只能在其定义所在的文件中使用。如果在不同的文件中有同名的内部函数,则互不干扰。
》static也可以用来声明一个内部函数
2.extern
》在定义函数时,如果在函数的最左边加上关键字extern,则表示此函数是外部函数,可供其他文件调用。C语言规定,如果在定义函数时省略extern,则隐含为外部函数。
》在一个文件中要调用其他文件中的外部函数,则需要在当前文件中用extern声明该外部函数,然后就可以使用,这里的extern也可以省略。
To be continue……