黑马程序员技术交流社区
标题: C语言学习笔记之static和extern关键字 [打印本页]
作者: chunhuayun 时间: 2015-10-1 16:46
标题: C语言学习笔记之static和extern关键字
一、static和extern修饰局部变量
1、static与extern对局部变量的作用
1)延长局部变量的声明周期,从程序到程序退出,但是它并没有改变程序的作用域
2)定义变量的代码在整个程序运行期间仅仅会执行一次
例如:
- #include <stdio.h>
-
- //没有使用static修饰局部变量
- void sum(){
- int sum = 0;
- printf("%d\n", sum++);
- }
-
-
- //使用static修饰局部变量
- void sum2(){
- static int sum = 0;
- printf("%d\n", sum++);
- }
- int main(int argc, const char * argv[])
- {
-
- // 没有使用static修饰局部变量
- printf("没有使用static修饰局部变量:\n");
- sum();
- sum();
- sum();
-
- // 使用static修饰局部变量
- printf("使用static修饰局部变量:\n");
- sum2();
- sum2();
- sum2();
- return 0;
- }
复制代码
打印结果:
没有使用static修饰局部变量:
0
0
0
使用static修饰局部变量:
0
1
2
分析结果:
使用局部变量后,每次对局部变量的修改都会影响下一次调用它的而结果。因为静态变量的定义只会被执行一次,每次调用函数时并没有真的释放掉该静态局部变量。因此每次修改的都是该局部变量。此时,【静态局部的变量的声明周期被延长了】。
【注意】1、extern是不能够修饰局部变量的
例如:
- void sum3(){
- extern int sum = 0;//会报错
- printf("%d\n", sum++);
- }
复制代码
二、static和extern修饰全局变量
1、static 对全局变量的作用
static修饰的全局变量,表示该全局变量只能在该文件中使用,而不能在其他文件中访问。
例如:
在Test.h头文件中
- //声明一个静态变量
- int age;
- //定义一个全局变量
- static int staticAge;
-
- //声明一个函数访问age的值
- void showAge();
-
- 在Test.c源文件中
- #include "Test.h"
- //定义一个普通变量
- int age = 10;
- //定义一个全局变量
- static int staticAge =20;
-
- //定义一个函数访问age
- void showAge(){
- printf("调用显示静态变量的函数:static age = %d\n", staticAge);
- }
复制代码
在main.c源文件中
- #include <stdio.h>
- #include "Test.h"
-
- int main(int argc, const char * argv[])
- {
- printf("访问普通全局变量:age = %d\n", age);
- printf("直接访问静态全局变量:static age = %d\n",staticAge);
- showAge();
- return 0;
- }
复制代码
打印结果:
访问普通全局变量:age = 10
直接访问静态全局变量:static age = 0
调用显示静态变量的函数:static age = 20
分析结果:
由结果可知,静态全局变量只能在定义的文件内使用,因此也称为内部变量。
【注意】在不同的文件中,使用static可以声明同名的变量
2、extern修饰的全局变量
表示当前变量,可以在本文件中使用,也可以在其他文件中使用。
例如:
把上例中
Test.h 文件中的
static int staticAge;
改成
extern int staticAge;
把Test.c文件中的
static int staticAge =20;
改为:
extern int staticAge =20;
在编译执行,结果为:
直接访问extern全局变量:static age = 20
【注意】1、extern声明的全局变量(在文件A中),如果B 文件包含A,那么B文件中就不能声明同名的变量。
2、变量定义为全局变量时,可以省略extern
3、不能用extern不能声明不存在的变量,即声明的变量,要么在本文件定义要么在其他文件有定义。
4、全局变量默认初始化为0
三、static和extern修饰函数
1、static和extern对函数的作用
1)static修饰的函数只能用在本文件,在其他文件中引用时会报错,就是内部函数。
2)extern修饰的函数不仅能在本文件中使用,也能在其他文件中使用。一般可以省略掉extern关键字。
作者: 睡觉就有梦想 时间: 2015-10-1 20:15
看看 感谢分享
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |