Day 3:复合类型之引用与指针(pointer)

引用和指针是两大常用的复合类型。

引用本质是给已有的初始化过的对象起另一个名字,它本身并非一个对象,所以不能引用一个引用,它与它所指向的值的初始值完全绑定,无论是赋值还是运算,本质上都是它指向的对象在进行这些操作。(引用必须指向初始化的对象)

引用符号& (同时也是取地址符)

如:int i

int &refi = i //refi引用了i的名字

refi=2 //本质上在给i赋值

int ii=refi //本质上是i给名为ii的int定义并初始化为i的值

另,引用的类型要和绑定的对象严格匹配!

指针与引用不同,它本身就是一个对象,允许直接赋值和拷贝,它自身的作用是存储一个对象所在的物理实际内存地址,而与其他对象一样,它本身也可不初始化,有一个未定义的(undefined)值,尽管不能访问它,因为那样会导致严重的错误。

指针定义符号 *(星号)(同时也是解引用符)

指针在初始化(指向某个对象)时,本质上是获取该对象的内存基址,获取它需要用到取地址符&

例如:int Aria =44;

          int *p =&Aria;

同引用一样,指针的类型也要和它指向的对象类型严格匹配!

*同时也有解引用符的功用,它可以访问一个指针指向的对象。

例如:int Aria =44;

          int *p=&Aria;

          cout<<*p; //会输出p所指向的Aria的值

有趣的是,如果不添加解引用符,即

          int Aria =44;

          int *p=&Aria;

          cout<<p;

cout会输出指针本身,也就是Aria的基址,它是一串数字和字母组成的字符串,形如:000000B65DDCF9C4

当然,我们也可以定义一个空指针,它不指向任何对象:

1.int *p1 = nullptr; //nullptr法

2.int *p2 =0; //直接初始化成字面常量0

3.#include<cstdlib>

int *p3 = NULL; //(需要库支持的)NULL法

编程习惯:一切指针最好都要初始化,因为访问未初始化的指针很可能会导致难以预知且难以发现的重大错误!即使是写出空指针也要赋空值!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值