引用和指针初探

引用 &(左值引用--Lvalue reference)

        引用即别名(并非对象),引用是一个对象的另外一个名字,且只能是一个对象,所以引用必须被初始化,一但初始化后便不能再改变引用的值,因为引用是很专一的偷笑

        一般在初始化变量时,初始值会被拷贝到新建的对象中,然而引用只是把它和它的初始值绑定在一起,并不是将初始值拷贝给引用。所以在调用引用的时候能加快程序的运行速度。

        引用和取地址符的区分: 引用一般出现在声明语句中,紧跟类型名;取地址符出现在表达式的右边,是一个运算符。

        

int i = 42;
int &r = i;//&紧随类型名出现,是一个引用
int *p;
p = &i;//&出现在表达式中,是一个取地址运算符

       
指针 *(pointer)

       指针是指向另外一种类型的复合类型,与引用类似,但是指针本身就是一个对象,可以对指针进行赋值和拷贝,而且在指针的生命周期内可以指向几个不同的对象(不专一),指针无需在定义时被初始化,若指针在块作用域内被定义但并没有认为初始化时会自动被初始化,指向不确定的值,这时候调用指针是很危险的。

       指针存放的是某个对象的地址。所以指针不能指向引用。因为引用不是对象。

       指针类型必须和它指向的对象严格匹配(有两种特殊情况)。

       指针值:指针值(即地址)只可能是以下四种情况之一。

              1.指向一个对象。

              2.指向对象所占空间的下一个地址。

              3.空指针,意味着指针没有指向任何对象。

              4.无效指针,也就是上述情况外的其他值。

       指针和解引用操作符:同引用和取地址操作符,在声明表达式中紧跟类型的 * 是指针,在表达式中是解引用操作符。(解引用操作符只适用于那些确实指向了某个对象的有效指针)。

       空指针:空指针的初始化有好几种方式,可以使用预处理变量NULL,字面值0,字面值nullptr来初始化。nullptr是一种特殊的字面值,它可以转换为任意其他的指针类型,是C++11的新特性,建议使用nullptr来初始化空指针。(不能把int变量赋值给指针,即使它的值为0)建议初始化所有指针,避免程序崩溃,并在可能的情况下,先定义对象再定义指向它的指针。
     

 

指向指针的引用

       指针不能指向引用,但是引用可以指向指针,因为指针是一个对象。

int *p;
int *&r = p;//r是一个对指针p的引用


       面对比较复杂的指针和引用的说明语句时,从右向左读有助于理解其真实含义。离变量名最近的符号对变量的类型有最直接的影响,r 最近的符号为 & ,出现在声明中,所以 r 是一个引用,声明符的其余部分用以确定 r 引用的类型是什么,此例中 * 号说明 r 引用的是一个指针,最后基本数据类型部分指出 r 引用的是一个int 指针。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值