c语言中的全局变量与局部变量

全局变量

在函数外面定义的变量,可以为本文件中其他函数所公用,他的有效范围为定义的位置开始一直到本源文件结束,即main函数结束。
局部变量和外部变量同名时,在局部变量的范围内,外部变量不起作用。

全局变量的存储方式:一般来说全局变量都是存放在静态存储 区中的,在程序开始执行时给全局变量分配存储区,程序执行完就释放。**在程序执行过程中他们占据固定的存储单元,**而不是动态的分配和释放。
除了一般的方式,还有下列方式:
1、用extern扩展外部变量及函数的作用域
对该变量做“外部变量声明”,表示把该外部变量的作用域扩展到此位置。有了此声明,就可以从“声明”处起,合法使用该变量。这是同一个源文件中的,即是同一个.c文件中的。
有一个函数在一个文件中已经定义了,但是我要在另一个文件中使用它,则可以在另一个文件中声明这个函数并且在前面加上extern修饰它。即可用了。
2、扩展到另一个源文件即.C文件
用法是在一个c文件中的开头定义全局变量int a,然后在另一个源文件中的开头使用extent关键字声明一下extent a,另外还要包含它的头文件即可。
**3、用static修饰全局变量将其限制在本.c文件中,再用extent就会报错。**同样的用static修饰一个函数,也是把这个函数的作用域限制在所在文件中。这样不同的人编写函数,就不用担心会不会重名。
另外,static修饰的变量在整个程序执行期间不释放,为其分配的空间始终存在。(而在java中,使用static修饰的属性、方法表示该属性、方法是全类共有的,可以直接用类名调用)。这是和java的不同之处。

局部变量

**只在定义他的函数范围内有效,出了函数就无效。**也有3中存储方式。
1.自动变量,默认情况下是这样的
函数中的形参、在函数中定义的变量、及复合语句中定义的变量都属于此类。调用函数是分配空间,函数调用完释放空间。
2、静态局部变量
函数调用完后仍然保留值,下次再调用该函数就从上次调用完的值开始计算。需要使用静态局部变量的情况如下:需要保留函数上一次调用结束时的值,例如求N!。
3、寄存器变量register,现在都是了,已经不用

小结重点难理解的点

用static修饰全局变量和局部变量的意思是不一样的。对于局部变量用static声明之后是把它放在静态存储区,在程序执行期间都不释放了,而不用static之前只在函数调用时才分配空间。
对于全局变量来说,用static声明是把它限制在本文件中。

猜你喜欢

转载自blog.csdn.net/sun_fengjiao/article/details/83830551