C++中变量的基础知识

        变量是程序中用于存储信息的单元,它对应于某个内存空间。在定义变量时,需要说明变量的名字和数据类型。这些信息将告诉编译器要为变量分配多少内存空间,以及变量中要存储说明类型的值。由于变量名可以代表其存储空间,因此程序能够在变量中存储值和取出值。


》变量的定义

       变量的定义通过变量的声明语句来实现,声明语句的一般格式为:

      [<存储类>]<类型名><变量名>[=<初值表达式>],...;

       <存储类>有四中,它们分别是auto、register、static、extern,默认的存储类是auto。

       <类型名>为已存在的一种数据类型名称,如char,short,int等基本数据类型名,或者是用户定义的数据类型名。

       <变量名>是用户定义的一个标识符,用来表示一个变量,该变量可以通过后面的可选项赋予一个值,称为给变量赋初值,也叫做对变量进行初始化。若变量名后不带有初值表达式。则不为变量赋予任何值,此时的变量值不确定。

       变量名的命名遵循这些规则:1>是一个合法的C++标识符;2>不能是C++关键字。

       <初值表达式>是一个表达式,它的值就是赋予变量的初值。

该语句格式后面使用的省略号表示在一条语句中可以定义多个变量,但各变量定义之间必须用逗号分开。  例:int a,b,c;


》变量的使用方式

》全局变量和局部变量

      全局变量是在所有函数定义、类定义和程序块之外声明的变量。声明全局变量时如果在程序中不对它进行专门的初始化,该变量会被系统自动初始化为0。在程序的任何一个函数、类或程序块之内均可以访问全局变量。

      局部变量是在某个函数定义、类定义或程序块之内声明的变量。局部变量只能在声明它的函数、类或程序块中被访问。


》生存期与作用域

      > 生存期是指从一个变量被声明且分配了内存开始,直到该变量声明语句失效,它占用的内存空间被释放为止。一个全局变量的生存期从它被声明开始,直到程序结束;

一个局部变量的生存期从它被声明开始,直到包含它的最近的一个程序块结束。

       >作用域是指变量名可以代表该变量存储空间的范围。

      一般情况下,变量的作用域与其生存期一致,但由于C++语言允许在程序的不同部分不同变量取同一名字,因此一个变量名的作用域可能小于其生存期。

例:如下代码段
1   int f()                  //其中,int型变量a的生存期是3~10行
2   {
3       int a=1,b=5;         //double型变量a的生存期是6~8行
4       if(b>=3)             
5       {                    //int型变量a的作用域却只能是3~5行和9~10行
6           double a=1.0;
7           b=2;             //6~8行范围内的int型变量a虽然被完好的保存着,但却不能使用
8        }
9        return a;           //即在6~8行范围内int型变量a是不起作用的。
10   }

》变量的存储类属性

       >auto变量:用关键字auto声明的局部变量称为自动变量。auto为变量声明时的默认存储类别,即在变量定义时,如果不显示标明存储类别,则系统自动按auto变量处理。auto变量所占的存储空间的分配和释放工作将由系统自动完成。

       >register变量:用关键字register声明的局部变量称为寄存器变量。register变量可能以寄存器作为其存储空间。声明寄存器变量时,关键字register的作用只能是建议(而不是强制)系统使用寄存器,当寄存器不够用时,该变量仍然按自动变量处理。

       >static变量:用关键字static声明的变量称为静态变量。任何静态变量的生存期将延续到整个程序的终止。与全局变量一样,为静态变量分配的存储空间在整个程序运行过程中不再被释放;如果静态变量未被赋值,系统将自动为其赋初值为0。

      >extern变量:用关键字extern声明的变量称为外部变量。变量一旦被声明为外部变量,系统就不必像一般变量那样为其分配内存,因为该变量已在这一局部的外面被定义。外部变量一般用于多个文件组成的程序中,有些变量在多个文件中被声明,但却是指同一变量。标明某一变量为外部变量可以避免为其重复分配内存。

 

》typedef类型说明

       使用关键字typedef可以为已有类型定义一个新类型名。其语法格式如下:

           typedef<已有类型名><新类型名>

        例: typedef doubleprofit;         //为double定义新类型名profit

                profita;                                //profit a;等价于double a;

        typedef类型说明并没有真正地定义新的数据类型,它只是相当于给某个已有的数据类型起了一个别名。在规模较大的程序中为了提高代码的可读性常采用这种形式。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值