最近开始学习c++,看《primer c++》一书,引用和指针部分,看过一遍,感觉有点模糊,故记录。
C++ 引用和指针
一、引用(reference)
为对象起了另一个名字,引用类型引用(refers to)另外一种类型。
定义:
将声明符写成&d的形式来定义引用类型,其中d是声明的变量名。
注意:
引用并非对象,只是为一个已经存在的对象所起的另外一个名字。
引用必须初始化。
对引用的操作,都是在对与引用绑定的对象进行操作。
正确定义引用
int ival = 1024;
int &refVal = ival; // refVal指向inval
错误定义引用
int &refVal2 = 10; // 错误 初始值必须是对象
double dval = 3.14;
int &refVal3 = dval; // 错误 这里引用类型的初始值必须是int类型
二、指针(pointer)
指针是指向(point to)另外一种类型的复合类型。
定义:
将声明符写成*d的形式,d是变量名。
指针存放某个对象的地址,我们可以通过取地址符(&)取得该地址
正确定义指针
double dval;
double *pd = &dval; // 初始值是double型对象的地址
double *pd2 = pd; // 初始值是指向double对象的指针
错误的定义指针
int *pi = pd; // 错误 指针pi的类型和pd的类型不匹配
pi = &dval; // 错误 试图把double型对象的地址赋给int型指针
利用指针访问对象
如果指针指向了一个对象,则允许使用解引用符(*)来访问该对象。
int ival = 42;
int *p = &ival; // 定义指针p,使p指向变量ival
cout << *p; // 由符号*得到指针p所指的对象,输出42.
三、两者区别
- 指针本身就是一个对象,允许对指针赋值和拷贝。在指针的生命周期内,它可以先后指向几个不同的对象。
- 指针无须在定义时赋初值。