域解析运算符和存储类---小结

一、定义

   域解析运算符,也称为可见性(visibility)。变量的域解析运算符就是程序中该变量的可见区域。

            分为:局部域解析运算符、文件域解析运算符、类解析运算符。

   存储类:automatic存储类--在定义它的函数的生命周期内存在。

               static存储类--在整个程序的生命周期内存在。

   生命周期:从变量创建到销毁的时间周期。

二、

  • 局部变量:在定义它的函数被调用的时候才创建,为automatic存储类。因为局部变量当函数调用的时候自动创建,而当函数返回时变量自动销毁,当然变量中的值也销毁了。 
  •     限制变量的生命周期是为了节约内存空间。
  •     局部变量的生命周期和可见性是一致的,也就是说存储类和作用域是一致的。
  •     局部变量没有初始化时,变量创建的时候为任意的值。
  1. 全局变量(global variable):也称外部变量(external variable),定义在任何函数的外部。更精确的说,它对所有变量定义之后的函数都是可见的。
    • 全局变量的存储类为静态的,表示变量在程序的生命周期内一直存在。
    • 全局变量在定义它们的文件内看见,从它定义的地方开始就是如此。
    • 当全局变量没有初始化,变量创建的时候会被自动初始化为0;(与局部变量不同)
  2. 静态局部变量:有这自动局部变量的可见性(只在定义的程序内部可见),但是他的生存周期从它被创建开始,在整个程序的生命周期内都有。
    • 静态局部变量可以让一个没有执行的函数记住一个或者几个值,已被以后此函数再次被调用的时候使用。当被调用的函数终止的时候其值仍保留。
    • 初始化只进行一次,当再次调用的时候不会被再次初始化,这点和自动局部变量是不同的。
  3. 注意:

    局部变量和函数参数是存储在栈中的,而全局变量和静态局部变量是存储在堆中的。

      栈: 在函数调用时,第一个进栈的是主函数中函数调用后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。

      当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续运行。

      堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。

posted @ 2011-08-04 12:10  csqlwy  阅读(777)  评论(1编辑  收藏  举报