C语言----全局变量/静态本地变量

全局变量初始化:

1、未做初始化全局变量会得到0值,指针会得到NULL值;
2、只能用编译时刻已知的值来初始化全局变量;
3、它们的初始化发生在main函数之前。

静态本地变量:

1、与全局变量一样,未做初始化会默认初始化为0;
2、静态本地变量的初始化只会在第一次进入函数时做,以后进入函数会保持上次离开时的值;(如下图,即使再进入函数内也不会被重新初始化)
#代码:

#include <stdio.h>  void print() {         static int a;         printf("a = %dn", a);         a++;         printf("a = %dn", a); }  int main() {         print();         print();         print();         return 0; } 

#输出:

a = 0 a = 1 a = 1 a = 2 a = 2 a = 3 

2、静态本地变量实际上是特殊的全局变量,它们都被放在数据段(与全局变量不同的可能是有static只能在本函数内使用,不能被其他文件读取,也可以用来避免重名);

返回指针的函数

1、返回本地变量的地址是危险的(因为函数调用结束之后,储存在栈里面的数据已经被收回,这块地方就可以被其他函数使用,如果再调用其他函数,那返回的地址里的数据可能就是这个新的函数里面的数据了);
2、返回全局变量和静态本地变量的地址是安全的;
3、返回函数内malloc的内存是安全的,但是容易造成问题;
4、最好返回传入的指针。


----参考翁凯老师视频

版权声明:玥玥 发表于 2021-03-13 7:10:32。
转载请注明:C语言----全局变量/静态本地变量 | 女黑客导航