第二章 变量和基本类型
引用
int val = 1024;
// OK
int &refVal = val;
// NG:引用类型的初始值必须是一个对象
int &refVal2 = 10;
// NG:引用必须初始化
int &refVal3;
// NG:给变量引用赋值的时候不能在引用对象的基础上做计算
int &refVal4 = val + 1;
// OK:但是常量是个例外,可以在引用对象的基础上做计算。
// CPP编译器会为我们生成一个临时变量,然后将引用绑定到这个临时变量上。
const int &refVal5 = val + 1;
// NG:引用的类型必须和引用对象的类型一致
double dval = 3.14;
int &refVal6 = dval;
// OK:但是常量是个例外,引用可以绑定到一个不同类型的对象上,只要这个对象可以转换成引用的类型即可。
const int &refVal7 = dval;
指针
-
指针的值应该属于下列4种状态之一:
- 指向一个对象
- 指向紧邻对象所占空间的下一个位置
- 空指针,意味着指针没有指向任何对象
- 无效指针,也就是上述情况之外的其他值
-
给指针赋值,就是令它存放一个对象的地址,或者令它为空。
-
通过
*
的个数可以区分指针的级别。也就是说,**
表示指向指针的指针,***
表示指向指针的指针的指针。
*
与&
运算符
int i = 42;
int &r = i; // &紧随类型名出现,表示r是一个引用。
int *p; // *紧随类型名出现,表示p是一个指针。
p = &i; // &紧随在表达式后面,表示取地址符。
*p = i; // *紧随在表达式后面,表示解引用符。
int &r2 = *p; // &紧随在类型名后面,表示r2是一个引用。*紧随在表达式后面,表示解引用p。