摘要:
1.static全局变量只初使化一次,防止在其他文件单元中被引用;
2.static局部变量只被初始化一次,下一次依据上一次结果值;
3.static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
一、static全局变量与普通的全局变量
1):相同
1.静态全局变量,全局变量 都以【静态存储方式】2.静态全局变量,全局变量 不在任何{}之内
2)作用域不同:
1.static全局变量:表示该变量是内部连接:
1.1 就是说在其它的.cpp文件中,该变量是不可见的(你不能用).
2.普通全局变量:表示该变量是外部链接
2.1 在所有的.cpp文件中(源程序),可用-只需要声明下即可;
3)初始化:
1.static全局变量只初使化一次,防止在其他文件单元中被引用;2.普通全局变量,可以在多个文件声明,但是赋值只能在一个文件(别的文件进行声明,就可以使用了);
二、static局部变量和普通局部变量有什么区别:
static局部变量只被初始化一次,下一次依据上一次结果值;(一~二)补充:初始化局部变量和全局变量
当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动对其初始化,如下所示:
数据类型 | 初始化默认值 |
---|---|
int | 0 |
char | '\0' |
float | 0 |
double | 0 |
pointer | NULL |
三、static函数与普通函数
作用域不同
1.static函数仅在本文件中使用:表示该函数是内部连接,之在本文件中有效,别的文件中不能应用该函数.
2.不加static的函数默认为是全局的:
也就是说在其他的.cpp中只要申明一下这个函数,就可以使用它.
2.建议:
2.1.只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。2.2.对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件
四、如何引用一个已经定义过的全局变量
方式一:extern
如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。方式二:可以用引用头文件的方式
如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间 会报错五、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
可以,在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值(别的文件,声明下既可使用,不能再次赋值),此时连接不会出错。