变量的存储类

在C++语言中,变量的存储类共有如下四种:  (1)auto存储类     (2)static存储类     (3)extern存储类  (4)register存储类

1. auto存储类

auto存储类,即自动存储类。在函数内部定义的变量,如果不指定其存储类,那么它就是auto类变量。

void func( )
        {
             int a;
             auto int b;
             …
        }
//a和b都是auto存储类变量

自动类变量是在动态存储区中分配存储单元的,当函数返回时,自动类变量中存放的数据也就消失了。

在变量初始化方面,自动类变量在每调用一次函数时都要赋一次初值,且自动类变量的默认初值不确定

2. static存储类

 static存储类,即静态存储类。如果某一对象或变量被指定为static存储类,则在程序执行过程中,此对象或变量总是存在。这样,即使函数调用结束以后,其静态对象或静态变量仍不消失,仍然保持其数值。  

在函数内部定义静态变量时,需要在定义变量的类型说明符的前面加上static关键字,在函数外面定义的对象或变量,即使其前面没有static,也是静态存储类;如果在函数外面定义的变量(即全局变量)其前面加上static,则称为静态外部变量,静态外部变量的作用域仅仅局限在该变量所定义的文件中,而在其它文件中是不能访问的。 

        void test_static( )
        {
                static int vs=0;
               cout << "static=" << vs << '\n';
               ++vs;
        }
        void main( )
        {
              int i;
             for (i=0; i<4; i++)
                     test_static( );
        }
    /*执行结果 :
         static=0
         static=1
         static=2
         static=3
    */

静态存储类对象或变量是在静态存储区中分配存储单元的,因此在函数调用结束时,它的值并不消失。

在变量初始化方面,静态变量是在编译过程中赋初值的,且只赋一次初值。

3. extern存储类

extern存储类,即外部存储类。如果在一个文件中要引用另一个文件中定义的外部变量,则在此文件中应用extern关键字把此变量说明为外部的。

   extern int a;     //a为别的文件中定义的外部变量
   void func( )
   {  
        a=100;
        ……
   }

外部变量的定义和说明:

大型程序为了易于维护和理解,通常需要把程序划分为多个文件来保存,每个文件都可以单独编译,最后再把多个文件的编译结果(即目标文件)连接到一起来生成一个可执行程序。这种情况下,如果在一个文件中需要引用另一个文件中的外部变量,就需要利用extern说明。

(1)外部变量的定义
   int mydata;    //外部变量的定义
   void func( )
   {
           ……
   }


(2)外部变量的说明
   extern int mydata;  //外部变量的说明
   void main ( )
   {
           ……
   }

4. register存储类

 register存储类,即寄存器存储类。为了提高某些自动类变量或函数参数的处理速度,可以在定义这些变量的类型说明符的前面加上register关键字,以通知编译系统为这些变量分配寄存器来存放其值

    void test_r(register int n)
     {
            register char c;
            …
     }    
    //register int n;可以简写为 register n;

实际可用的寄存器数受硬件特性的限制,所以并不是所有寄存器变量都能够保存在寄存器中。

能够说明为寄存器类变量的数据类型是有限制的,一般常用的有char、int、short int和unsigned int等。 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值