CPP - 引用&指针

  1. 引用

引用(reference)为对象起了另外一个名字,引用类型引用(refers to)另外一种类型。通过将声明符写成 &d 的形式来定义引用类型型,其中 d 是声明的变量名。在初始化变量时,会出现初始值拷贝现象,定义引用则将引用与初始值对象绑定在一起。

  • 引用必须初始化(类型必须严格匹配)

  • 引用并不是对象,而是给一个已经存在的对象起另一个名字(这个对象必须存在,不可为字面值[10,”10”…])

    1
    2
    3
    4
    int &refVal  = 0;            //error

    double dval = 3.14;
    int &refVal2 = dval; //error
  1. 指针

指针(pointer)是’”指向(point to)“另外一种类型型的复合类型。定义指针类型的方法将声明符写成d的形式,其中d是变量名。

  • 指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象。

  • 指针无须在定义时赋初值。

使用取地址符( & )可以取得存放某个对象的地址。

  • 类型必须严格匹配
1
2
double dval = 3.14;
int *p = &dval;

指针的值(即地址)应属下列4种状态之一:

  • 指向一个对象。
  • 指向紧邻对象所占空间的下一个位置。
  • 空指针,意味着指针没有指向任何对象。
  • 无效指针,也就是上述情况之外的其他值。

利用指针访问对象

如果指针指向了一个对象,则可以用解引用符(*)来访问该对象。

1
2
3
4
5
int ival = 42;
int *p = &ival; //声明指针

*p = 0; //改变对象内容
cout<< *p; //输出0
  • 解引用符只适用于确指向了某个对象的有效指针
  1. 空指针

空指针不指向任何对象,在试图使用一个指针之前可以检查其是否为空。

1
2
3
int *p1 = nullptr;  //C++11
int *p2 = 0;
int *p3 = NULL; //cstdlib
  1. void* 指针

void *是一种特殊的指针类型,可用于存放任意对象的地址。存放的也仅仅就是一个地址。

1
2
double obj = 3.14;
void *pv = &obj;
  • 不能直接操作相关void *所指向的对象。

  1. 指向指针的指针

通过*的个数区分指针的级别。

1
2
3
int ival = 1024;
int *pi = &ival; //指向int
int **ppi = &pi; //指向一个int指针
  1. 指向指针的引用

引用不是对象,指针是对象,因此不存在指向引用的指针,只存在指向指针的引用。

1
2
3
4
5
6
int i = 42;
int *p;
int *&r = p; //对int指针的引用

r = &i; //r是一个int指针,即r指向i
*r = 0; //解引用r得到i

如何理解r的类型是什么?

从右往左阅读,越靠近r的对r有最直接影响(*&r -> & -> r为一个指针)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值