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 = 0;
int *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的值
。。。未完待续