指针和引用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本章主要内容
8.1 指针和指针变量 8.2 指 针 运 算 8.3 指针和数组 8.4 指针数组和多级指针 8.5 指针和函数 8.6 new和delete运算符 8.7 引用和其他类型的指针 8.8 简 单 链 表 8.9 类 型 定 义
8.1 指针和指针变量
8.1.1 指针的概念 8.1.2 指针变量的说明
行数组首地址a,相当于&a[0]。
行元素a[i] 即为*(a+i),实际 为各列数组首地址。
各列数组首地址a[i],相当于 &a[i][0]。
列元素地址&a[i][j],可用 a[i]+j或者*(a+i)+j
表示。 图8.4所示为二维数组与指针
的关系示意图。
图8.4 二维数组与指针关系示意图
例8-9 二维数组与指针 例8-10 用指针变量输出二维数组
8.4.1 指针数组
指针数组是指针变量的集合,它的每一个元素都是一个 指针,且具有相同的数据类型。其一般的定义格式为:
《存储类型》<数据类型> *<指针数组名>[<元素个数>];
数据类型是指针所指向变量的数据类型。因为“[]”的 优先级高于“*”,指针<数组名>与[<元素个数>]构成一个 数组,再与*结合,指明是一个指针数组,数据类型指明指 针数组中每个元素所指变量的类型。
相等(==)比较的含义是判断两个指针变量是否指向相同 的内存单元,即两个指针值是否相同;而不等比较(<、>、 <=、>=)的含义是判断两个指针变量是否指向不同的内存单 元
在C++中,同一个符号可能表示不同的运算符。 编译器根据运算符的优先级、操作数的类型及个数来区 分的。 例8-6 指针的关系运算 例8-7 混合运算及其优先级
8.3.3 指针和字符串
用字符指针表示字符串有3种方法: (1)指向字符数组,让字符指针与存放字符串的
字符数组关联,就可以用字符指针表示该字符串。 (2)直接定义指针并初始化,让它指向指定的字
符串。 (3)直接将字符串常量赋予字符指针
例8-11 指针与字符串
8.4 指针数组和多级指针
8.4.1 指针数组 8.4.2 指向一维数组的指针变量 8.4.3 多级ቤተ መጻሕፍቲ ባይዱ针
指向指针的指针变量也称为二级指针。其声明 的语法格式为:
<数据类型> **<变量名> 两个符号**表示后面声明的变量为指向指针的指针 变量。
是初始化指针变量,使其值为“空”。
例8-1 指针的赋值运算 例8-2 指针的赋值运算 例8-3 指针的赋值运算
8.2.2 指针的算术运算
左值所能进行的算术运算有两种:一是指针变量与一个 整数的加或减运算;二是自增、自减运算。 1. 与整数的加或减运算
如果指针变量的定义为 datatype *p; p初始地址值为 DS, 那么p +n = DS +nsizeof(datatype)。
因为运算符[ ]的优先级高于*,所以用圆括号()将*与 指针变量名括起来以改变运算符的优先级顺序,使*先作用 于指针变量,然后再与[ ]结合,形成指向一维数组的指针 变量。
例8-15 指向一维数组的指针变量
8.4.3 多级指针
如果指针变量中存放的是另一个指针的地址, 就称该指针变量为指向指针的指针变量。
例8-13 指针数组输出 例8-14 将字符串降序后输出
8.4.2 指向一维数组的指针变量
可以声明一个指针变量使其只能指向一维数组,声明的 格式为:
<数据类型> <(*变量名)> <[元素个数]>
要注意这样两种写法:
int *p[4]; //定义了一个指针数组,该数组有4个指针元素 int (*p)[4];//定义了一个指针,该指针指向一个有4个元素的数组
图8.3 一维数组与指针示意图
引用一个数组元素,有3种方法:
(1)下标法:a[i]。 (2)数组名地址法:*(a+i)。 例8-8 一维数组与指针
(3)指针法:
指针地址法:*(pa+i)
指针下标法:pa[i]
8.3.2 指针与多维数组
在C++中,二维数组的各个元 素值按行的顺序在一片连续的内存 空间中存放。
8.3 指针和数组
8.3.1 指针与一维数组 8.3.2 指针与多维数组 8.3.3 指针和字符串
8.3.1 指针与一维数组
如图8.3所示,定义一个数组
a[10]和一个指针pa。
int a [10], *pa;
pa=a;
//A
pa =&a [0]; //B
A、B行的效果是一样的,都
是把数组的首地址赋给指针。
指针加法的单位是指针对应类型的字节数。 例8-4 与整数的加或减运算 2. 指针的自增或自减 指针的自增或自减表示指针从当前位置向后或向前移动 sizeof(数据类型)长度的存储单元,指向下一个或上一个 元素 例8-5 指针的自增或自减
8.2.3 指针的关系运算
指针变量可以进行关系运算,两个指针变量的关系运算 是根据两个指针变量值的大小(作为无符号整数)来进行比较 的,通常只有同类型的指针变量进行比较才有意义。
向的类型决定数据类型。了编译器将把那片内存区里的内 容当做什么来看待。
8.2 指 针 运 算
8.2.1 指针的赋值运算 8.2.2 指针的算术运算 8.2.3 指针的关系运算
8.2.1 指针的赋值运算
指针赋值运算常见的形式如下。 (1)将一个变量的地址以&运算的结果形式赋给
一个同类型的指针。 (2)将另一同类型的指针值赋给某一指针 (3)在C++中可以将0赋给任一指针变量,其含义
8.1.1 指针的概念
指针:一个变量的地址,一个内存单元的地址。 变量的地址:该变量所占存储单元的首地址。 变量的值:内存单元中的内容。 变量地址的表示:&变量名。 &:取地址运算符。 指针变量:专门存放变量地址的变量。
8.1.2 指针变量的说明
指针变量与其他类型的变量一样,必须先说明后使用, 说明格式为:
《存储类型》<类型>*<变量名1>,*<变量名2>…; 其中,存储类型是可任选的;变量名前的星号*指明所说明 的变量为指针变量;而类型则指出指针变量所指向的数据类 型。 1.指针的类型
从语法的角度看,只要把指针声明语句里的指针名字去 掉,剩下的部分就是这个指针的类型。 2.指针所指向的数据类型
当通过指针来访问指针所指向的内存区域时,指针所指
8.1 指针和指针变量 8.2 指 针 运 算 8.3 指针和数组 8.4 指针数组和多级指针 8.5 指针和函数 8.6 new和delete运算符 8.7 引用和其他类型的指针 8.8 简 单 链 表 8.9 类 型 定 义
8.1 指针和指针变量
8.1.1 指针的概念 8.1.2 指针变量的说明
行数组首地址a,相当于&a[0]。
行元素a[i] 即为*(a+i),实际 为各列数组首地址。
各列数组首地址a[i],相当于 &a[i][0]。
列元素地址&a[i][j],可用 a[i]+j或者*(a+i)+j
表示。 图8.4所示为二维数组与指针
的关系示意图。
图8.4 二维数组与指针关系示意图
例8-9 二维数组与指针 例8-10 用指针变量输出二维数组
8.4.1 指针数组
指针数组是指针变量的集合,它的每一个元素都是一个 指针,且具有相同的数据类型。其一般的定义格式为:
《存储类型》<数据类型> *<指针数组名>[<元素个数>];
数据类型是指针所指向变量的数据类型。因为“[]”的 优先级高于“*”,指针<数组名>与[<元素个数>]构成一个 数组,再与*结合,指明是一个指针数组,数据类型指明指 针数组中每个元素所指变量的类型。
相等(==)比较的含义是判断两个指针变量是否指向相同 的内存单元,即两个指针值是否相同;而不等比较(<、>、 <=、>=)的含义是判断两个指针变量是否指向不同的内存单 元
在C++中,同一个符号可能表示不同的运算符。 编译器根据运算符的优先级、操作数的类型及个数来区 分的。 例8-6 指针的关系运算 例8-7 混合运算及其优先级
8.3.3 指针和字符串
用字符指针表示字符串有3种方法: (1)指向字符数组,让字符指针与存放字符串的
字符数组关联,就可以用字符指针表示该字符串。 (2)直接定义指针并初始化,让它指向指定的字
符串。 (3)直接将字符串常量赋予字符指针
例8-11 指针与字符串
8.4 指针数组和多级指针
8.4.1 指针数组 8.4.2 指向一维数组的指针变量 8.4.3 多级ቤተ መጻሕፍቲ ባይዱ针
指向指针的指针变量也称为二级指针。其声明 的语法格式为:
<数据类型> **<变量名> 两个符号**表示后面声明的变量为指向指针的指针 变量。
是初始化指针变量,使其值为“空”。
例8-1 指针的赋值运算 例8-2 指针的赋值运算 例8-3 指针的赋值运算
8.2.2 指针的算术运算
左值所能进行的算术运算有两种:一是指针变量与一个 整数的加或减运算;二是自增、自减运算。 1. 与整数的加或减运算
如果指针变量的定义为 datatype *p; p初始地址值为 DS, 那么p +n = DS +nsizeof(datatype)。
因为运算符[ ]的优先级高于*,所以用圆括号()将*与 指针变量名括起来以改变运算符的优先级顺序,使*先作用 于指针变量,然后再与[ ]结合,形成指向一维数组的指针 变量。
例8-15 指向一维数组的指针变量
8.4.3 多级指针
如果指针变量中存放的是另一个指针的地址, 就称该指针变量为指向指针的指针变量。
例8-13 指针数组输出 例8-14 将字符串降序后输出
8.4.2 指向一维数组的指针变量
可以声明一个指针变量使其只能指向一维数组,声明的 格式为:
<数据类型> <(*变量名)> <[元素个数]>
要注意这样两种写法:
int *p[4]; //定义了一个指针数组,该数组有4个指针元素 int (*p)[4];//定义了一个指针,该指针指向一个有4个元素的数组
图8.3 一维数组与指针示意图
引用一个数组元素,有3种方法:
(1)下标法:a[i]。 (2)数组名地址法:*(a+i)。 例8-8 一维数组与指针
(3)指针法:
指针地址法:*(pa+i)
指针下标法:pa[i]
8.3.2 指针与多维数组
在C++中,二维数组的各个元 素值按行的顺序在一片连续的内存 空间中存放。
8.3 指针和数组
8.3.1 指针与一维数组 8.3.2 指针与多维数组 8.3.3 指针和字符串
8.3.1 指针与一维数组
如图8.3所示,定义一个数组
a[10]和一个指针pa。
int a [10], *pa;
pa=a;
//A
pa =&a [0]; //B
A、B行的效果是一样的,都
是把数组的首地址赋给指针。
指针加法的单位是指针对应类型的字节数。 例8-4 与整数的加或减运算 2. 指针的自增或自减 指针的自增或自减表示指针从当前位置向后或向前移动 sizeof(数据类型)长度的存储单元,指向下一个或上一个 元素 例8-5 指针的自增或自减
8.2.3 指针的关系运算
指针变量可以进行关系运算,两个指针变量的关系运算 是根据两个指针变量值的大小(作为无符号整数)来进行比较 的,通常只有同类型的指针变量进行比较才有意义。
向的类型决定数据类型。了编译器将把那片内存区里的内 容当做什么来看待。
8.2 指 针 运 算
8.2.1 指针的赋值运算 8.2.2 指针的算术运算 8.2.3 指针的关系运算
8.2.1 指针的赋值运算
指针赋值运算常见的形式如下。 (1)将一个变量的地址以&运算的结果形式赋给
一个同类型的指针。 (2)将另一同类型的指针值赋给某一指针 (3)在C++中可以将0赋给任一指针变量,其含义
8.1.1 指针的概念
指针:一个变量的地址,一个内存单元的地址。 变量的地址:该变量所占存储单元的首地址。 变量的值:内存单元中的内容。 变量地址的表示:&变量名。 &:取地址运算符。 指针变量:专门存放变量地址的变量。
8.1.2 指针变量的说明
指针变量与其他类型的变量一样,必须先说明后使用, 说明格式为:
《存储类型》<类型>*<变量名1>,*<变量名2>…; 其中,存储类型是可任选的;变量名前的星号*指明所说明 的变量为指针变量;而类型则指出指针变量所指向的数据类 型。 1.指针的类型
从语法的角度看,只要把指针声明语句里的指针名字去 掉,剩下的部分就是这个指针的类型。 2.指针所指向的数据类型
当通过指针来访问指针所指向的内存区域时,指针所指