您的位置:首页 > 职场人生

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

2015-03-28 18:51 579 查看
------<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>

// 第一种办法:在函数前面定义a
int 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(); // 声明外部函数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……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐