1. 什么是复合类型
复合类型(compound type)是指基于其它类型定义的类型(eg: 引用和指针)。
2. 引用(reference)
引用即别名,引用为对象起了另外一个名字,引用类型引用另外一种类型。
引用定义后, 对其进行的所有操作都是在与之绑定的对象上进行的。
eg:
int ival = 1024;
int &refVal = ival; // refVal指向ival,是ival的另一个名字
int &refVal2; // 报错: 引用必须被初始化
refVal = 2; // 此处即是赋给了ival
3. 指针(pointer)
指针是指向另外一种类型的复合类型。
指针本身就是一个对象,允许对指针进行赋值和拷贝,指针的生命周期内它可以先后指向几个不同的对象。
eg:
int ival = 42;
int *p = &ival; // p存放变量ival的地址,或者说p是指向变量ival的指针
cout<<*p; // 通过解引用符访问指针指向的对象,输出42
*p = 0; // 通过p为变量ival赋值
cout<<*p; // 输出0
4. void*指针
void*是一种特殊的指针类型,可用于存放任意对象的地址。
5. 指向指针的指针
指针是内存中的对象,像其它对象一样也有自己的地址,因此允许把指针的地址再存放到另一个指针当中。
eg:
int ival = 1024;
int *pi = &ival; // pi指向ival的指针
int **ppi = π // ppi指向pi, 指向一个int型的指针
ppi --> pi --> ival(1024)
6. 指向指针的引用
引用本身不是一个对象,因此不能定义指向引用的指针。
但是指针是对象,所以存在对指针的引用。
eg:
int i = 42;
int *p; // p是一个int型指针
int *&r = p; // r是一个对指针p的引用
r = &i; // r引用了一个指针,因此给r赋值&i就是令p指向i
*r = 0; // 解引用r得到i, 也就是p指向的对象i的值改为0
cout<<i; // 0
网友评论