概述
变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。在指令式语言中,变量通常是可变的;但在纯函数式语言(如Haskell)中,变量可能是不可变(immutable) 的。在一些语言中,变量可能被明确为是能表示可变状态、具有存储空间的抽象(如在Java和Visual Basic中);但另外一些语言可能使用其它概念(如C的对象)来指称这种抽象,而不严格地定义“变量”的准确外延。
命名,定义
变量,这个词对于我们编程人员来说是再熟悉不过的了,不论它在什么编程语言里都会存在,而且本质都是相同的,唯一不同的就是他们的命名规则,定义形式,大同小异。在C++,C# ,Java中定义格式基本一致,为:数据类型 变量名;或 数据类型 变量名= 初值;C++中特有的格式:数据类型 变量名(初值);而在VB中有些不同的是:变量名 as 数据类型 。
作用域
说到变量,作用域是我们不得不谈的。关于它们的作用域在C++中因为继承了C语言的语言风格,所以是以定义的位置不同来区分的,可分为文件作用域,函数作用域,块作用域和函数原型作用域,其中文件作用域属于全局作用域,其他三者均为局部作用域。而在VB中是以关键字和定义的位置来共同决定的,在过程变量以关键字Dim 或Static来定义,模块变量要在模块的变量声明部分已关键字dim 或private来定义,而全局变量则在模块声明部分以Public关键字来定义。
声明周期
从空间上我们以作用域描述了变量,那现在我们再来从时间上看看变量,从时间方面来描述变量,在编程语言里统称为变量的生命周期。当然了因语言的不同,称呼,叫法有些大同小异,在C++中叫做变量的存储类型,分为auto型,Register型,extern型,static型。auto是定义局部的动态变量的,默认省略。Register是寄存器变量,是沿用C语言中的,在高级编程中很少用。Extern是配合全局变量定义的,是全局变量的扩展声明。Static是静态变量,在大部分编程语言中基本都相同。而在VB中声明周期是以Dim定义动态变量,Static来定义静态变量的。
谈到变量时,往往我们都会联想到与它相对应的常量,下面我们来看看在C++中关于常量的定义。在C++中常量分为数值常量,符号常量,和常变量。
常量
在C++中数值常量的使用和其他语言中的没有什么区别,在这里就不赘述了。我们主要来看看符号常量和常变量的定义。
符号常量
在C++中符号常量的定义和其他的编程语言中有很大的区别,在C++中符号常量是以预处理命令来处理的。格式为:#define 符号常量名数值 ,如:#define PI 3.14。注意:因为符号常量的定义是预处理命令,所以定义符号常量是切记不能用赋值符号,且不以分号结尾。如:#define PI = 3.14 和 #define PI 3.14;都是错误的。
常变量
在C++中常变量的定义格式与变量类似,格式:const 数据类型 符号常量名 = 数值;其中Const 和数据类型的位置是可以调换的。它 和变量不同的是在定义时必须在前加Const并为其赋值,并且在程序中一旦为其赋值不可更改,所以被称为常量。其实C++中的常变量就是VB中的符号常量,虽然为常量但是和数值常量,符号常量有着本质的不同,C++或其他的编程语言中普通常量在指令中是不占内存单元的,但是C++中的常变量(VB中的符号常量)是要占内存单元的,实质是一种特殊的,内存单元中值固定不变的一种变量,本质也是一个内存单元。唯一和变量不同的是它的值在程序中是固定不变的。