第8章指针和引用.ppt
《第8章指针和引用.ppt》由会员分享,可在线阅读,更多相关《第8章指针和引用.ppt(35页珍藏版)》请在优知文库上搜索。
1、第8章 指针和引用8.1.1 指针的概念 指针:一个变量的地址,一个内存单元的地址。变量的地址:该变量所占存储单元的首地址。变量的值:内存单元中的内容。变量地址的表示:&变量名。&:取地址运算符。指针变量:专门存放变量地址的变量。8.1.2 指针变量的说明 指针变量与其他类型的变量一样,必须先说明后使用,说明格式为:存储类型类型变量名1,变量名2;其中,存储类型是可任选的;变量名前的星号指明所说明的变量为指针变量;而类型则指出指针变量所指向的数据类型。1.指针的类型 从语法的角度看,只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。2.指针所指向的数据类型 当通过指针来访问指针
2、所指向的内存区域时,指针所指向的类型决定数据类型。了编译器将把那片内存区里的内容当做什么来看待。8.2.1 指针的赋值运算指针赋值运算常见的形式如下。(1)将一个变量的地址以&运算的结果形式赋给一个同类型的指针。(2)将另一同类型的指针值赋给某一指针 (3)在C+中可以将0赋给任一指针变量,其含义是初始化指针变量,使其值为“空”。例8-1 指针的赋值运算 例8-2 指针的赋值运算 例8-3 指针的赋值运算8.2.2 指针的算术运算 左值所能进行的算术运算有两种:一是指针变量与一个整数的加或减运算;二是自增、自减运算。1.与整数的加或减运算 如果指针变量的定义为 datatype*p;p初始地址
3、值为DS,那么p+n=DS+nsizeof(datatype)。指针加法的单位是指针对应类型的字节数。例8-4 与整数的加或减运算2.指针的自增或自减 指针的自增或自减表示指针从当前位置向后或向前移动sizeof(数据类型)长度的存储单元,指向下一个或上一个元素 例8-5 指针的自增或自减8.2.3 指针的关系运算 指针变量可以进行关系运算,两个指针变量的关系运算是根据两个指针变量值的大小(作为无符号整数)来进行比较的,通常只有同类型的指针变量进行比较才有意义。相等(=)比较的含义是判断两个指针变量是否指向相同的内存单元,即两个指针值是否相同;而不等比较(、=)的含义是判断两个指针变量是否指向
4、不同的内存单元 在C+中,同一个符号可能表示不同的运算符。编译器根据运算符的优先级、操作数的类型及个数来区分的。例8-6 指针的关系运算 例8-7 混合运算及其优先级8.3 指针和数组8.3.1 8.3.1 指针与一维数组指针与一维数组8.3.2 8.3.2 指针与多维数组指针与多维数组8.3.3 8.3.3 指针和字符串指针和字符串8.3.1 指针与一维数组 如图8.3所示,定义一个数组a10和一个指针pa。int a 10,*pa;pa=a;/A pa=&a 0;/B A、B行的效果是一样的,都是把数组的首地址赋给指针。引用一个数组元素,有3种方法:(1)下标法:ai。(2)数组名地址法:
5、*(a+i)。(3)指针法:指针地址法:*(pa+i)指针下标法:pai图8.3 一维数组与指针示意图例8-8 一维数组与指针8.3.2 指针与多维数组 在C+中,二维数组的各个元素值按行的顺序在一片连续的内存空间中存放。行数组首地址a,相当于&a0。行元素ai 即为*(a+i),实际为各列数组首地址。各列数组首地址ai,相当于&ai0。列元素地址&aij,可用 ai+j或者*(a+i)+j表示。图8.4所示为二维数组与指针的关系示意图。图8.4 二维数组与指针关系示意图例8-9 二维数组与指针例8-10 用指针变量输出二维数组8.3.3 指针和字符串用字符指针表示字符串有3种方法:(1)指向
6、字符数组,让字符指针与存放字符串的字符数组关联,就可以用字符指针表示该字符串。(2)直接定义指针并初始化,让它指向指定的字符串。(3)直接将字符串常量赋予字符指针 例8-11 指针与字符串8.4 指针数组和多级指针8.4.1 8.4.1 指针数组指针数组8.4.2 8.4.2 指向一维数组的指针变量指向一维数组的指针变量8.4.3 8.4.3 多级指针多级指针8.4.1 指针数组 指针数组是指针变量的集合,它的每一个元素都是一个指针,且具有相同的数据类型。其一般的定义格式为:存储类型 *;数据类型是指针所指向变量的数据类型。因为“”的优先级高于“*”,指针与构成一个数组,再与*结合,指明是一个
7、指针数组,数据类型指明指针数组中每个元素所指变量的类型。例8-13 指针数组输出 例8-14 将字符串降序后输出8.4.2 指向一维数组的指针变量 可以声明一个指针变量使其只能指向一维数组,声明的格式为:要注意这样两种写法:int*p4;/定义了一个指针数组,该数组有4个指针元素 int(*p)4;/定义了一个指针,该指针指向一个有4个元素的数组 因为运算符 的优先级高于*,所以用圆括号()将*与指针变量名括起来以改变运算符的优先级顺序,使*先作用于指针变量,然后再与 结合,形成指向一维数组的指针变量。例8-15 指向一维数组的指针变量8.4.3 多级指针 如果指针变量中存放的是另一个指针的地
8、址,就称该指针变量为指向指针的指针变量。指向指针的指针变量也称为二级指针。其声明的语法格式为:*两个符号*表示后面声明的变量为指向指针的指针变量。例8-16 通过多级指针访问指针数组元素 例8-17 多级指针的简单应用8.5 指针和函数8.5.1 8.5.1 指针作为函数的参数指针作为函数的参数8.5.2 8.5.2 返回指针的函数返回指针的函数8.5.3 8.5.3 指向函数的指针指向函数的指针8.5.4 8.5.4 带参数的带参数的main()main()函数函数8.5.1 指针作为函数的参数 当形参为指针时,实参可以是一个基类型相同的指针变量或变量的地址。当函数的参数为指针时,可将指针值
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指针 引用
