引用 &(左值引用--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 指针。
版权声明:本文为博主原创文章,未经博主允许不得转载。