C++学习笔记_第二章_第二节
变量
什么是变量
变量就是在程序运行中值可以改变的量,每一个变量都应该有一个名字,称为变量名,并在内存中占据一定的存储单元,并在该存储单元中存放变量的值。变量名和变量值是两个不同的概念,变量名代表内存中的一个存储单元,在对程序进行编译连接时由系统为其分配地址,在程序中从变量中取值实际上是通过变量名找到相应的内存单元,并从中读取数据。
变量名命名规则
首先让我们来了解以下标识符。和其他高级语言一样:用来标识变量、符号常量、函数、数组、类型等实体名字的有效字符序列称为标识符(identifier)。简单地说,标识符其实就是名字。变量名就是一种标识符,变量名必须遵循标识符的命名规则。
C++规定标识符只能由字母、数字、和下划线_
组成,且第一个字符必须是字母或者下划线。
以下是一些合法的标识符,同时也是合法的变量名:
You,HEY,_day,month,YeAr,xiao_min
以下是一些不合法的标识符:
Y.U.M,#123,$555,5E,C++,xiao-hua,ni hao
注意,在C++中,大写字母和小写字母被认为是两个不同的字符。因此YOU和you是两个不一样的变量名。一般来说,变量名用小写字母来表示,以便辨认。注意,变量名不能与C++的关键字、系统函数名和类名相同。以下提供一些国外常用的变量命名格式:
在变量名前怎加一个字母来表示这个变量的数据类型,如:cName,表示这个是一个字符类型的变量。iAge,表示这是一个整形变量。
用几个单词来组成一个变量名,用小写字母开头,后面的单词首字母用大写,如:userName,
用几个单词来组成一个变量名,每个单词之间用下划线
_
隔开,如:People’s_Republic of_China,talk_to_myself。
在变量命名时,你可以参考以上比较常用的命名方式,避免使用A,B,C这种简单变量名,这样会使程序的可读性大大降低,甚至程序编写者自己也搞不懂哪个变量是干什么的!
C++没有规定标识符的长度,但是各个具体的编译系统都有自己的规定,超过的字符不被识别,请在写程序之前了解所用系统的标识符长度规定。
声明变量和定义变量
在C++中,要求每一个变量都必须做声明或者定义,变量只有声明或定义之后才能使用。
声明变量
声明变量是用来告诉编译器变量的名称和数据类型,并不为其分配内存
声明变量的格式为:
extern | 变量的数据类型 | 变量名 |
---|---|---|
extern | int | joe |
例:
1 | extern int joe; //声明变量joe |
变量的声明有以下含义:
告诉编译器此变量名已经被占用,不能作为其他变量的变量名。
告诉编译器,这个变量名已经匹配到一块内存上,下面用到的变量已经在别的文件中被定义,声明可以出现多次。
注意:即使使用了extern关键字,如果变量被赋值,则也是定义,如:
1 | extern int joe=654; //定义变量joe |
定义变量
定义变量用于为变量分配存储空间,还可以为变量指定初始值,称为变量初始化,在一个程序中,变量只可以被定义一次。
定义变量的格式为:
变量的数据类型 | 变量名 |
---|---|
char | name |
例:
1 | char name; //定义变量name |
或是一次性定义多个变量,在每个变量名之间英文逗号,
隔开。
例:
1 | float num1,num2,num3; //定义变量num1,num2,num3的数据类型为单精度浮点型 |
C要求变量定义应放在所有的执行语句之前,而C++放宽了限制,只要在第一次使用该变量之前进行定义就可以。
例:
1 | int age; |
C++要求对变量做强制定义的目的是:
- 没被定义的不作为变量名可以保证程序中变量名的使用正确,例如变量声明如下:
1 | int age; //定义变量age |
而在执行语句中错写变量名,如:
1 | eedge = 18; //错写age为eedge; |
在编译中会检查出eedge未被定义,报错为:“变量eedge未经声明”,便与用户发现错误,避免变量名使用错误。
每一个变量被指定为一个数据类型,在编译时就可以为其分配相应的存储单元。如指定age为int型,一般的编译系统对其分配四个字节,并按整数的方式存储数据。
指定每一变量属于一个特定的类型,便于在编译时根据此来检查该变量进行的运算是否合法。例如整形变量num1和num2,可以进行求余运算:
num1 % num2
,求余会得到num1/num2的余数。如果num1和num2的数据类型为char,则不允许进行这类运算,在编译时会给出有关的错误信息。
对变量赋初始值
在定义变量时为其赋予一个初始值称为变量初始化。初始值可以是一个常量,也可以是一个有确定值的表达式。例如:
1 | float num1,num2 = 156*0.6; //变量num2被初始化为93.6,变量num1未被初始化 |
如果未对变量赋初始值,则该变量的初始值是一个不可预测的值,即该存储单元中当时的内容是不可知的。
初始化不是在编译阶段完成的,是在程序运行时执行本函数时才赋予初始值的,相当于执行一个赋值语句。例如:
1 | int num1 = 156; //定义变量num1为整形变量并赋予初始值156 |
相当于执行以下两个语句:
1 | int num1; //定义变量num1为整形变量 |
常变量
在定义变量时如果加上关键字const
,则变量的值在程序运行期间不能被改变,这种变量称为常变量(constant variable)。例如:
1 | const int num1 = 2; //用const关键字来声明此变量的值不能被改变,其值始终为2 |
定义常变量时必须同时对其初始化,此后其值不能在被改变,常变量不能出现在赋值号的左边。例如上面一句不可以被写成:
1 | const int num1; //并未对变量num1赋初始值,此语句不合法 |
可以用表达式对常变量进行初始化,如:
1 | const int num2=156+65 ; //常变量num2的值被指定为221 |
对于常变量来说,就是在变量的基础上加了一个约束,使其值不可以被改变,因此常变量又称为只读变量(read-only-variable)。
请区别用#define指令顶定义的符号常量和用const定义的常变量。符号常量只是用一个符号代替一个字符串,在预编译时把所有符号常量替换为所指定的字符串,它没有数据类型,在内存中并不存在以符号常量命名的存储单元。而常变量有变量的特征,它具有数据类型,在内存中存在着以它命名的存储单元,可以用sizeof运算符测出其长度。于一般变量唯一的不同是指定变量的值不能改变。
用#define指令定义符号常量是C中所采用的方法,C++把它保留了下来,但是C++程序员一般喜欢使用const定义常变量。虽然二者实现的方法不同,但是从使用的角度看,都可以认为用一个标识符代表一个常量。
结束语
以上,是笔者整理的自我认为本章内重要的内容,内容多数来自《C++程序设计(第三版)》中的第二章内容,希望可以帮助到正在阅读本片文章的你,最后,感谢你的阅读,祝你生活愉快,学习顺利