您的位置:首页 > 编程语言 > C语言/C++

C语言学习入门 (七) 变量与函数,static和extern关键字

2014-12-04 17:04 302 查看
局部变量

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的作用在于限制该全局变量的作用域,

只能在定义该全局变量的文件中才能使用,跟其他源文件中的同名变量互不干扰。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: