C语言之变量作用域

Python015

C语言之变量作用域,第1张

全局变量:作用域整个工程,在使用的地方通过extern声明即可,存放于全局数据区,占用静态存储单元。

局部变量:作用于函数方法体内,函数执行结束就释放,存放于栈区。

全局静态变量:作用于当前类,在外部类不可使用,除非使用#include引入头文件,存放于全局数据区。

局部静态变量:作用于函数方法体内,函数执行结束不释放,存放于全局数据区。

全局静态存储区:分为 DATA 段和 BSS 段。DATA 段(全局初始化区)存放初始化的全局变量和静态变量;BSS 段(全局未初始化区)存放未初始化的全局变量和静态变量。程序运行结束时自动释放。其中BBS段在程序执行之前会被系统自动清0,所以未初始化的全局变量和静态变量在程序执行之前已经为0。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。

静态存储变量的优势:

优势: 可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。

关于static

(1)在修饰变量的时候,static 修饰的静态局部变量只执行初始化一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。

(2)static 修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是 extern 外部声明也不可以。

(3)static 修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。static 修饰的变量存放在全局数据区的静态变量区,包括全局静态变量和局部静态变量,都在全局数据区分配内存。初始化的时候自动初始化为 0。

(4)不想被释放的时候,可以使用static修饰。比如修饰函数中存放在栈空间的数组。如果不想让这个数组在函数调用结束释放可以使用 static 修饰。

(5)考虑到数据安全性(当程序想要使用全局变量的时候应该先考虑使用 static)。

计算机编程就是数学理论的一种实现

如果你明白了数学中为什么有那么多表示数值的元,那么对应的计算机中那些元就是变量了。

变量是为了能够更好处理一类数据,而不是一个数据。如果没有变量那么就只能针对某个数据来做运算了,显然这样的程序是没有什么作用的。

如果你是初学,变量你可以看成一个容器,放数据的。当然容器是在内存里的。不同的容器放不同类型的变量。

计算机怎么知道你的数据在哪里,有多长?就是通过变量沟通的,不同的类型长度不一样,这些长度都是预定义好的,你声明什么类型的变量,计算机就知道你的数据有多长了,至于你的数据在哪里,就是变量名了。

随着你学习的深入,你会越来越清楚的,知道的答案也越精确^_^