1、引用
初始化值是对象
int val = 12;
// 应用必须初始化
int &refVal = val;
// 错误,没有初始化
int &refVal0;
// 错误,初始化应为对象,而不是字面值
int &refVal00 = 17;
// 注意: 引用的类型和对象类型必须一样
2、指针
指针定义
int *ip1, *ip2;
double dp, *dp2;
int val = 32;
int *p = &val;
int *q = p;
cout << *p << endl << val << endl;
// 注意:指针赋值与被赋值时,数据类型必须保持一致
输出值:
32
32
生成空指针的方法:
int *p1 = 0;
//nullptr是字面值(C++11)
int *p2 = nullptr;
//首先要 #include<cstdlib>
int *p3 = null;
//合法,p1为指向int的指针类型,p2为int类型
int* p1, p2; //与语句 int *p1, p2; 等价
指向指针的指针
int val = 233;
int *pi = &val; //指向int类型的指针
int **ppi = π //指向一个int类型的指针(pi的值为int型)
cout << "direct value: " << val <<endl
<< "indirect value: " << *pi <<endl
<< "doubly indirect value: " << **ppi << endl;
输出:
233
233
233
指向指针的引用
注意:引用本身不是对象,所以不能定义指向引用的指针。但指针是对象,所以存在对指针的引用。
int i = 42;
int *p; // p是一个int型指针
int *&r = p; // r是一个对p指针的引用
r = &i; // r引用了对象i,因此使p指向i
*r = 0; // 解引用r得到i(p指向i),将i的值改为0,p的值也为0