黑马程序员——零基础学习iOS开发——07 全局变量、局部变量、static和extern关键字

来源:互联网 发布:淘宝上的呼死你叫什么 编辑:程序博客网 时间:2024/06/10 08:18

------<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.全局变量和局部变量可以重名

下面这样写,是可以的。函数内部的a是局部变量,和外部的全局变量a没关系。
#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语言中,一个函数不可以访问在它后面定义的全局变量。




上面代码中,main函数第5行想访问第10行定义的全局变量a,编译器报错:找不到a的定义

解决这个错误,有两种办法:

第一种:在函数前面定义
#include <stdio.h>// 第一种办法:在函数前面定义aint a;int main(){    a = 10;        return 0;}

第二种:extern声明变量a
#include <stdio.h>extern int a; // 这里只是a的声明extern int a; // 这里只是a的声明,可以多次声明int main(){    a = 10;        return 0;}int a;


2.static定义私有全局变量

但很多时候,我们并不想让源文件中的全局变量跟其他源文件共享。

当你想定义一个相当于私有的全局变量,那么你就得用static关键字来定义变量。


main.c文件中
int a;
test.c文件中
static int a;
这样写的效果是:main.c中的全局变量a是共有的,而test.c文件中的全局变量a是test.c私有的。
这两个a不是同一个a。

三、static和extern关键字对函数的作用

1.内部函数与外部函数

外部函数:如果在当前文件中定义的函数允许其他文件访问、调用,就称为外部函数。C语言规定,不允许有同名的外部函数。

内部函数:如果在当前文件中定义的函数不允许其他文件访问、调用,只能在内部使用,就称为内部函数。C语言规定不同的源文件。


2. extern声明、定义外部函数

#include <stdio.h>extern void test(); // 声明外部函数testint main(){    return 0;}extern void test() // 定义外部函数test{    printf("test");}

其实,函数前面什么都不写时,默认就是外部函数,所以extern可以省略

3. static声明、定义内部函数

有时候,我们可能想定义一个"内部函数”,也就是不想让其他文件访问本文件中定义的函数。

这时就可以用static定义一个内部函数,这个函数可以和其他文件的中的函数重名

#include <stdio.h>static void test(); // 声明内部函数testint 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……


0 0
原创粉丝点击