变量的三个属性

来源:互联网 发布:淘宝上买单机游戏 编辑:程序博客网 时间:2024/05/17 09:15

  变量的三个基本属性:作用域、链接属性、存储持续性,这三个属性决定了变量的可视性(他可以在什么地方使用)和生命周期(它的值将保留多久)

  四种基本的数据类型:整形、浮点型、指针、聚合类型

  【1】变量的存储持续性:根据数据保留在内存中的时间

  自动存储持续性:在函数定义中声明的变量(包含函数参数)他们在函数开始执行其所属函数或代码块时被创建,在执行完函数或者代码块时被释放。存储在栈中

  静态存储持续性:在函数定义外定义的变量和使用static定义的变量,他们在程序整个运行过程中都存在。存储在数据段

   动态存储持续性:用malloc或者new分配的变量,内存将一直存在,知道使用delete或者free来释放它。存储在堆

  【2】变量的链接性:external、internal、none

   external:可以在文件直接共享

   internal:在一个文件内的函数间共享

   none:自动变量没有连接性

  【3】变量的作用域

   函数中定义的变量可在该函数中使用但不能在其他函数中使用。在文件中的函数定义之前定义的变量可在所有函数中使用

   

 

  在函数中声明的函数参数和变量的存储持续性为自动,作用域为局部,连接性为none。

   {

                         int a;

                         {

                                  int a;

                          }

   }

   第一个a的作用域为蓝色大括号,第二个a的作用域为黑色括号,第二个a会在第二个黑括号内隐藏第一个a,一旦第二个黑括号结束后第一个a重新可见。

   如果变量为静态存储持续性,如果其连接性为external,则它可在其他文件中被访问,如果连接性为internal,则只能在当前文件中被访问,如果连接性为none,则只能在当前函数或者当前代码块内访问(这三种连接性均在整个程序执行期间存在,静态存储变量在程序运行期间个数不变,compiler用固定内存来村)

 

   举一个例子,

   int global = 100;            //static duration.external

   static int one_file = 50;     //static duration.internal

   int main()

   {

   }

 

   void func(int n)

   {

      static int count = 0;      //static duration.none

   }

 

   static duration,external linkage,在每个使用外部变量的文件中都必须声明他。

   定义:分配存储空间

   声明:引用已有变量不分配存储空间

   引用声明使用关键字extern且不初始化

   如果要在多个文件中使用外部变量,只需要在一个文件中包含该变量的定义但在使用该变量的其他文件中用extern声明它

  

 

   static duration,internal linkage,这种变量只能在他所在的文件中使用,常规外部变量具有外部连接性

 

   static duration, none linkage,两次函数调用之间静态局部变量的值保持不变。

 

   函数和连接性

   所以函数的存储持续性都为静态,整个程序执行期间都存在。static 将函数的连接性设为内部,即只在一个文件中使用,同样,在其他文件中可以使用同名函数。

   

 

   

   

 

0 0