您的位置:首页 > 编程语言 > C语言/C++

C++ 基础学习教程 第二章 变量(2)

2017-06-16 16:25 344 查看
第二节 复合类型

第一节中我们介绍了变量的定义,声明,初始化等变量基本基础知识。本节我们将讲解比较复杂的复合类型。

复合类型是指基于其他类型定义的类型,即在基础数据类型的基础上,又指明了该变量与基本数据类型有关的某种类型。本节将介绍其中两种:引用和指针。

1 引用类型

1.1 定义与初始化

引用是为变量起了另一个名字,引用类型引用另外一种类型。通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名:

int i = 0;
int &ref_i= i;


在定义引用类型变量时,程序并不会给引用变量分配存储数据的空间来拷贝初始值,而是将引用和它的初始值绑定在一起,一旦初始化完成,引用将和它的初始值对象一直绑定在一起。因为无法令引用重新绑定到另一个对象,因此引用必须初始化。

1.2 说明

引用的类型都要与之绑定的对象严格匹配,而且,引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起,除了两种例外情况:

第一种特例就是在初始化常量引用时允许用任意表达式作为初始值,只要该表达式的结果能转换成引用的类型即可。

int i = 0;
const int constRef_i = i;       //正确
const int constRef_i = 0;       //正确
const int constRef_i = i * 2;   //正确
int ref_i = 0;                  //错误


第二种由于超出基本概念太多,暂时不说明。

2.指针

2.1 定义

指针是指向另外一种类型的复合类型。

定义指针类型的方法将声明符*d的形式,其中d是变量名。由于指针存放某个变量的地址,当我们需要初始化指针时,我们需要获得变量的地址(取地址符&):

int i = 0;
int *point_i;               //未初始化的指针
int *point_i = &i;          //指向i的指针


指针和引用一样,指针指向的变量的类型与指针的类型必须匹配。

2.2 初始化空指针

int *p1 = nullptr;             //C++新标准
int *p1 = NULL;
int *p1 = 0;


2.3 利用指针访问对象

尽管引用和指针都可以间接访问对象,但访问方式不同,对引用的所有操作都是与之绑定的对象上进行的,无需任何符号。指针则需要使用解引用符(*)来访问该对象。

对指针解引用会得出所指的对象,因此如果给解引用的结果赋值,实际上也就是给指针所指的对象赋值。

2.4 指针与引用的区别

(1)指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象。

(2)指针无须在定义时赋初值。和其他内置类型一样,在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 引用 指针