1.指针和引用为C++的复合类型

2.*、&在声明时称为指针、引用,在表达式中称为解引用符、取地址符,是操作符,不能混淆含义。

 

引用

1.引用必须初始化,要与声明类型匹配,且必须是对象(不能是字面值或表达式);且定义了引用,就无法令其再绑定到另外的对象。

2.引用本身不是一个对象,所以不能定义引用的引用

 

指针

1.不能定义指向引用的指针,因为引用不是对象,没有实际地址

 

const

1.const对象必须初始化,且一旦创建,其值就不能修改。

2.默认情况下,const对象仅在文件内有效;若想多个文件共用一个,使用extern const的方式(否则,会报重定义错误,已验证)

3.常量引用,表示引用及其对应的对象都是常量,不能修改。如下例:

const int ci = 1024;
const int &r1 = ci;  //引用及其对应的对象都是常量
r1 = 41;  //错误:r1是对常量的引用
int &r2 = ci; //错误:试图让一个非常量引用指向一个常量对象

4.对const的引用(常量引用)可以与声明类型不匹配,如下例子均正确

int i = 42;
const int &r1 = i;  //不允许通过r1来修改i的值,但可以直接修改i的值
const int &r2 = 42;
const int &r3 = r1 * 2;
double dVal = 3.14;
const int &ri = dVal;  //这句话编译器会拆成这样:const int temp = dVal; const int &ri = temp;   temp为编译器生成的 “临时量”

5.指针和const举例

const double pi = 3.14
const double *cptr = π //指向常量的指针,这里是指向一个双精度常量的指针
double dval = 3.14;
cptr = &dval;  //不可以通过cptr来修改dval,但可以直接修改dval。
int errNum = 0int *const curErr = &errNum; //常量指针,必须初始化;且curErr不允许修改,但可以擦用*curErr = 10的方式修改errNum。
const int *const tempErr = &errNum;  //指向常量对象的常量指针,不允许修改tempErr,也不允许通过tempErr修改errNum修改

 6.常量表达式:是指值不会改变并且在编译过程就能得到计算结果的表达式

const int max_files = 20; //max_files是常量表达式
const int limit = max_files + 1; //limit是常量表达式
const int sz = get_size(); //sz不是常量表达式,因为运行期才能确定get_size的值

 

 

。。。未完待续