文章之前:本文概念、代码等多摘自《C++ Primer》,csdn上的博客,各处技术论坛,所以有诸多雷同,特此声明,但细节就不说明详细出处了,请原作者谅解。另外,《C++ Primer》的概念结合第三版和第四版,特别是第三版的内容,时代与技术更新,可能有些不符合现在的术语与说法,请见谅,且本人学识有限,有的内容有错误偏差的地方,请见谅与指出,希望与各位共同进步。
字面值常量(常以字面值直接称呼,也称为直接常量,文字常量等,下略):当一个数值出现在程序中,如0 ,3.141159,称为字面值常量,"字面值"指只能以它的值称呼访问它,"常量"指它的值不能改变,它们有相应的类型,0是int型的,3.14159 是 double 型。只有内置类型存在字面值,没有类类型的字面值。因此,也没有任何标准库类型的字面值。(这句话可以暂不理解,虽然我也以为很重要)。另,字面值常量不可寻址(nonaddressable),尽管它存储在内存中某个地方。
以上是C++ Primer中的定义,可知字面值又分为:整型字面值,0;浮点字面值,3.14159;布尔字面值,仅有true 和 false;和字符字面值,'a' ,'2', ',', ' '。
符号常量:字面值的符号表示,代表固定不变值的名字。常用#define或const定义。
#define PI 3.14159
const int PI 3.14159;
变量:变量提供了程序可以操作的有名字的存储区。C++中的每一个变量都有特定的类型,该类型决定了变量的内存大小和布局、能够存储于该内存中的值的取值范围以及可应用在该变量上的操作集。C++ 程序员也把变量称为对象(object)。
与变量关联的两个值:
1,数据值,存贮在某个内存中,成为对象的右值(are-value),右值可以是文字常量与变量。右值只能出现在赋值的右边,不能出现在赋值语句的左边。(这里指常量)
2,地址值,即数据值的内存地址,也成为左值(ell-value)。左值可以出现在赋值语句的左边或右边。(可以理解为变量,即地址)
变量的声明与定义
变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。
变量声明用于向程序表明变量的类型和名字。定义也是声明:当定义变量时我们声明了它的类型和名字。可以通过使用extern关键字声明变量名而不定义它。不定义变量的声明包括对象名、对象类型和对象类型前的关键字extern。
两者间差别:定义为变量分配存储空间,有时指定初始值。声明不另外分配存储空间,事实上,它只是说明变量定义在程序的其他地方。程序中变量可以声明多次,但只能定义一次。由于只能定义一次,所以可以说定义包括声明与定义,但声明仅是声明。
extern int i; // declares but does not define i(声明i但非定义)
int i; // declares and defines i(声明同时定义了i)
另外:只有当声明也是定义时,声明才可以有初始化式,因为只有定义才分配存储空间。初始化式必须要有存储空间来进行初始化。如果声明有初始化式,那么它可被当作是定义,即使声明标记为 extern:
extern double pi = 3.1416; // definition(定义)
任何在多个文件中使用的变量都需要有与定义分离的声明。在这种情况下,一个文件含有变量的定义,使用
该变量的其他文件则包含该变量的声明(而不是定义)。