第二章
变量定义
初始化与赋值
声明与定义的区别
- 声明:规定了变量的类型和名字。
- 定义:除声明之外,还需要申请存储空间。
如果想声明一个变量,而非定义它,需要使用extern关键词。
extern int i; // 声明i而非定义i
int j; // 声明并定义j
变量只能被定义一次,但可以被多次声明。
变量命名规范
- 用户自定义类名一般以大写字母开头。
- 多个单词用 ‘_’ 隔开。
引用
引用:为一个已经存在的对象起另外一个名字。
-
引用必须被初始化。 -
引用类型的初始值,必须是一个对象(表达式或字面值不可以被引用)。引用本身不是对象,所以不能定义引用的引用。 -
引用要和绑定的对象严格匹配, 但以下两种情况例外:
-
在初始化常量引用时允许用任意表达式作为初始值,只要该表达式的结果能够转换成引用的类型即可。 -
常量引用绑定一个非常量的对象、字面值甚至是一个表达式。 int i = 42;
const int &r1 = i; //允许将const int&绑定到一个普通int对象上:不能通过r1修改i的值,但可以修改i的值或者其他方式(例如修改i的一个非常量引用)来修改r1的值。
const int &r2 = 42; //正确,r2是一个常量引用。
cosnt int &r3 = r1 * 2; //正确,r3是一个常量引用。
int &r4 = r1 * 2; //错误,r4非常量引用。
指针
-
本身就是一个对象,允许对指针赋值和拷贝,指针无须在定义的时候赋值。 -
如果指针指向了一个对象,则允许使用解引用符(*)来访问该对象,使用(&)获取地址。 -
指针的类型都要和它所指向的对象严格匹配。 -
使用未经初始化的指针是引发运行时错误的一大原因。 ? 在大多数编译器环境下,如果使用了未经初始化的指针,则该指针所占内存空间的当前内容将被看作一个地址值。访问该指针,相当于去访问一个本不存在的位置上的本不存在的对象。糟糕的是,如果指针所占内存空间中恰好有内容,而这些内容又被当作了某个地址,就很难分清它到底是合法的还是非法的了。
赋值与指针
理解复合类型的声明
const限定符
定义:const用于定义一个变量,它的值不能被改变。const对象必须初始化。
默认状态下,const对象仅在文件内有效。当多个文件出现了同名的const变量时,等同于在不同文件中分别定义了独立的变量。
如果想让const变量在文件间共享,则使用extern修饰。
|