关于static

来源:互联网 发布:微信矩阵是什么意思 编辑:程序博客网 时间:2024/05/16 06:36

问题1:什么是static?static有什么用途?
       静态变量(以static作为修饰符的变量)分为两种:全局静态变量和局部静态变量。全局静态变量是在所有函数之外定义的静态变量,局部静态变量是在某个函数内(如mian函数)定义的静态变量。静态变量存储在内存的静态存储区,静态存储区在程序的整个运行期间都存在。未经初始化的静态变量会被程序自动初始化为0(然而,自动变量的值如未被初始化则其值是随机的!)。全局静态变量的作用域是从定义开始到整个文件结束(这也是使用全局静态变量的一个目的,即限制变量的作用域为本文件内部!)。也就是说全局静态变量对其他文件是不可见的!局部静态变量只在定义它的函数内有效。
     
static的用途如下:
      1.限制变量的作用域
      2.设置变量的存储域

问题2:static全局变量与普通全局变量有什么区别?static局部变量与普通局部变量有什么区别?static函数与普通函数有什么区别?
      在定义变量时,全局变量之前冠以static就构成了静态全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。两者在存储方式上并无不同。两者的区别在于普通全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,普通全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域(即只在定义了该静态全局变量的文件内有效,在同一源程序的其他源文件中不能使用)因此可以避免其他源文件使用该变量。
      综上所述,当把一个普通全局变量改变为静态全局变量时其实是改变了该变量的作用域,从而限制了它的使用范围。
      对于函数内定义的普通变量(即局部变量),当该函数每次被调用时都会从新定义该变量并分配存储空间,而对于函数内定义的静态变量(即局部静态变量),只在该函数范围内有效且只被初始化一次,当再次调用该函数时,这个局部静态变量的值是上次调用结束时残留的值。
      static函数(即静态函数,在定义函数时加上static关键字)与普通函数的作用域不同,它仅仅存在于本文件中。在其他源文件中不能使用。所以静态函数也叫内部函数。对于在当前源文件以外也可使用的函数(即普通函数),应该在一个头文件中作以说明,这样,在要使用这个函数的源文件中包含这个头文件即可。
       从存储区域方面来看,程序的普通局部变量存在于堆栈中,全局变量,静态全局变量存在于静态存储区中。

coder_jack@126.com日记写到200905152253