C++复合类型之引用和指针

2022-08-31  本文已影响0人  ElliotG

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 = &pi;    // 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

 

7. const限定符

上一篇 下一篇

猜你喜欢

热点阅读