关于指针和引用

1.异同点

引用与指针都是复合类型(compound type),建立在已存在类型的基础上

引用是对对象的绑定,是对象的别名,并不是具体的对象;指针指向某一对象,指针本身就是一个对象

引用在定义时必须初始化,且只能绑定一个对象不能修改;指针在定义时不要求初始化,且指针可以更改指向的对象

2.初始化

引用的初始化:

int a = 3;
int &ra = a;
++ra;   //a=4

指针的初始化:

int b = 4;
int *pb = &b;

指针初始化为空:
int *p1 = 0;
int *p2 = nullstr;
int *p3 = NULL;//#include <cstdlib>

注意:用字面值0初始化指针,下面两种情况:

int i = 0;
const int j = 0;
int *pa = i;         //error
int *pb = j;         //ok

3.关于引用的引用,指向指针的指针,指向引用的指针和指针的引用

引用的引用:因为引用本身不是一个具体的对象,因此不存在对引用的引用

int i = 1;
int &ri = i;
int &rii = ri;     //ok
int& &riii = ri;   //error

引用的引用:首先是个引用,然后引用的对象是引用,所以分析 int& &riii = ri; 左侧按 照从右到左分析&rii是个引用,int&引用的对象是个int类型的引用

指针的指针:指针本身是个对象,因此可以定义指向指针的指针

 int x = 0;
 int *px = &x;
 int **pxx = &px;

 cout << x << " " << *px << " " << **pxx << endl;
 cout << &x << " " << px << endl;
 cout << &px << " " << pxx << endl;

指向引用的指针:同引用的引用一样,显然指向引用的指针是不存在的

int& *p = &ra;

指针的引用

int a = 1;
int *pa = &a;
int* &rpa = pa;

cout << pa << " " << rpa << endl;
cout << *pa << " " << *rpa << endl;

*rpa = 2;
cout << a << endl;

注意:对于比较复杂的变量的定义,在赋值运算符左侧按照从右到左的分析方法是比较清晰的


4.关于void*

void*指针可以存放任意数据类型的地址,其他类型的指针只能指向与其类型相同的对象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值