1.static全局变量与普通全局变量的区别;static局部变量与普通局部变量的区别;static全局函数与普通全局函数的区别;

摘要:

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文件中对此变量赋初值(别的文件,声明下既可使用,不能再次赋值),此时连接不会出错。

猜你喜欢

转载自blog.csdn.net/a2241076850/article/details/81025914