指针、引用和常量的关系_夜悊的博客-CSDN博客
1.
① 指针是对象,引用不是对象(在此可以理解为变量,一个变量是一个对象)
- 指针不必须初始化
- 引用只是为一个已经存在的对象所起的另一个名字(别名):所以普通引用不可指向常量
- 引用必须初始化(初始化时的右值是一个已经存在的对象)
int *p;
int val; //一个已经存在的“对象”
int &ref = val;
int &ref1; //× 引用必须初始化
int &ref2 = 1; //× 普通引用不可指向常量
② 不能定义指向引用的指针(因为引用不是对象)
int val;
int &ref=val;
int &*p=ref; //×
③ 可以定义指向指针的引用(因为指针是对象)
int a = 3;
int* p = &a;
int& ref = p; // x
int&* ref = p; // x 即 int& (*ref) = p;
int*& ref = p; // 即 int* (&ref) = p;
int &*p 错误,*与p靠得最近,所以p是一个指针,但是这个指针的类型是int &,所以这个是错吴的, 因为不能创建引用的指针。
int *& p 正确, &与p靠得最近,所以p是一个引用,这个引用的类型是int*,也就是一个指针变量的引用,但是必须初始化,否则也是错误的。
④ 不能定义引用类型的常量(因为引用不是对象):可以简记为有const&,但没有&const。
- 普通指针不可指向常量,普通指针也不可指向const变量
- 指向常量的指针可指向常量
- 指向常量的指针可指向非常量
- 普通引用不可指向常量
- 指向常量的引用可指向常量
- 指向常量的指针可指向非常量
int val = 0;
int &const ref = val; // × 不能定义引用类型的常量
int const &ref = val; // 指向常量的引用可以(简称”常引用“)
注:const可以修饰基础类型或指针,不能修饰引用(因为const只能修饰对象)。
zconst关键字修饰的对象_sgbl888的博客-CSDN博客_const修饰对象