c++ 指针、引用和常量

指针、引用和常量的关系_夜悊的博客-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修饰对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值