学习目标:精通C++
复合类型 引用与指针学习内容:
引用
1、 引用即别名
int &refVal = ival;
int ii = refVal; // equal ii == ival
refVal就是ival的另一个名字,直接食用即可。
2、 引用并非对象,相反的,它只是为存在的对象起的另一个名字
3、 引用只能bind对象,不能与字面值或某个表达式bind
int &refVal2 = 10 //错误,引用类型的初始值必须是对象
double dval = 3.14;
int &refVal3 = dval; //错误,引用类型的初始值必须是int型对象
指针
获取对象的地址
1、 指针本身是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不通的对象
2、 指针无须在定义时赋值
3、 定义指针类型的方法是 *d,d是变量名
4、 获取对象的地址
int ival = 2;
int *p = &ival //& 取地址符
double dval;
double *pd = &dval; //right
double *pd2 = pd; //right
int *pi = pd; //error
pi = &dval; //error 数据类型不同
利用指针访问对象
*(解引用符)
int ival = 2;
int *p = &ival;
cout << *p; // 2
*p = 0;
cout << *p; // 0
空指针
int *p1 = nullptr;
int *p2 = 0;
int *p3 = NULL;
建议:初始化所有的指针,访问未初始化的指针会程序崩溃。
其他指针操作
int ival = 1024;
int *p1 = 0;
int *p2 = &ival;
if(p1)
//...false
if(p2)
//...true
void* 指针
double obj =3.14, *pd = &obj;
void *pv = &obj; //任何类型
pv = pd;
void*的视角来看内存空间,没办法访问内存空间中所存的对象。