静态、全局、局部变量

最近准备嵌入式面试,整理一些嵌入式C语言基础。

全局变量和局部变量区别:
1.分配给全局变量的内存,一直到程序运行结束时才释放。
2.对于在程序块中申明的变量,在块的入口处对其分配内存,在块退出时释放内存,则这种变量称为自动变量。

3.当一个过程执行完毕,它的局部变量的值就已经不存在,而且变量所占据的内存也被释放。当下一次执行该过程时,它的所有局部变量将重新初始化。

变量的存活期:这一期间变量能够保持它们的值

静态方式存储:静态变量、全局变量

变量由static进行再说明改变其原有的存储方式: 

全局变量  -->  静态全局变量 (改变作用域)

局部变量(自动变量)  --> 静态局部变量  (改变生存期)

静态全局变量和全局变量有什么区别:
        (a)若程序由一个源文件构成时,全局变量与全局静态变量没有区别。 
        (b) 若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独              享,即:全局静态变量对组成该程序的其它源文件是无效的。 
        (c)全局变量具有外部链接的静态;可以在所有源文件里调用;除了本文件,其他文件可以通过extern的方式引用;
      静态全局变量的作用: 
      (a)不必担心其它源文件使用相同变量名,彼此相互独立。
      (b)在某源文件中定义的静态全局变量不能被其他源文件使用或修改。
        (c) 只能在本文件中使用!具有内部链接的静态;不允许在其他文件里调用;


静态局部变量与自动变量区别:
 1 静态局部变量在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,存储在动态存储区空间
   ,函数调用结束后即释放。(静态局部变量始终存在着,也就是说它的生存期为整个源程序,但作用域在定义该变量的函数内,退出该函数后, 尽管该变量还继续存在,但不能使用它。)
 2 为静态局部变量赋初值是在编译时进行值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。
   而为自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值。
3.在定义局部变量时不赋初值的话,对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符型变量)。而对自动变量来说,如果不赋初值,则它的值是一个不确定的值。
   这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的值是不确定的
 4. 虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的,也就是说,在其他函数中它是“不可见”的。







你可能感兴趣的:(嵌入式/C语言学习~)