C++引用与指针
本文最后更新于:2020年4月13日 晚上
引用与指针
引用
大部分时候,当我们使用引用时,使用的是左值引用,lvalue reference,C++11 中新增了一种引用,右值引用,rvalue reference ,主要用于内置类。
引用是为对象起了另外一个名字,引用类型 引用 另外一种类型。通过将声明符写成&d的形式来定义引用类型。
1 |
|
一般在初始化的时候,初始值会被拷贝到新建的对象之中。
然而在定义引用中,程序是把引用和它的初始值**绑定(bind)**在一起,而非拷贝。
一旦初始化完成,引用将和它的初始值对象一直绑定在一起。因为无法令引用重新绑定到另外一个对象,因此引用必须初始化。
此外:因为引用本身不是一个对象,所以不能定义引用的引用。
1 |
|
指针
指针是指向另外一种类型的复合类型。
指针的定义
1 |
|
获取对象的地址
指针是存放某个对象的地址,获取对象的地址需要使用取地址符 &
。
1 |
|
指针值
指针的值也就是地址,应当属于下列四种状态之一。
- 指向一个对象
- 指向紧邻对象所占空间的下一个位置
- 空指针,即指针没有指向任何一个对象‘
- 无效指针,除上述情况之外的其他值
试图拷贝或者说是以其他方式访问无效指针的值都将会引发错误,访问无效指针的后果无法预计。
使用指针访问对象
如果指针指向了一个对象,那么可以使用 解引用符 *
来访问对象。
1 |
|
’&‘ 和 ‘*’ 的多重含义
1 |
|
空指针
空指针 null pointer,不指向任何对象。
1 |
|
得到空指针最直接的办法就是使用字面值nullptr来初始化指针,这是C++11 新标准引入的方法。nullptr是特殊类型的字面值,它可以被转换成任意其他的指针类型。
void* 指针
待续……
指针与引用的异同点
指针和引用类似,实现了对其他对象的间接访问。
指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象。
引用必须在定义时赋值(或者说是绑定),而指针无须在定义时进行赋值。和其他内置类型一样,在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值。
demo
1 |
|
上述两者不同,对p1来说,不能修改p1指向的内存,即它是类似 char const *p1
,p1是指向文字常量区的指针变量。
p2呢,可以改变数组元素,因为它的实际上是将”abc”拷贝到数组p2之中。
1 |
|
1 |
|
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!