工信版(中职)编程语言基础------C++模块6教学课件.ppt

上传人:春哥&#****71; 文档编号:90587178 上传时间:2023-05-16 格式:PPT 页数:67 大小:1.53MB
返回 下载 相关 举报
工信版(中职)编程语言基础------C++模块6教学课件.ppt_第1页
第1页 / 共67页
工信版(中职)编程语言基础------C++模块6教学课件.ppt_第2页
第2页 / 共67页
点击查看更多>>
资源描述

《工信版(中职)编程语言基础------C++模块6教学课件.ppt》由会员分享,可在线阅读,更多相关《工信版(中职)编程语言基础------C++模块6教学课件.ppt(67页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、YCF(中职)编程语言基础-C+模块6教学课件模块模块6 指针指针任务任务1指针概述指针概述任务任务2指针类型指针类型任务任务3指针的运算指针的运算任务任务4指针与数组指针与数组任务任务5指针与字符串指针与字符串任务任务6指针与函数指针与函数任务任务7const指针指针返回任务任务1指针概述指针概述指针是指针是指针是指针是C+C+语言具有代表性特征的功能之一。语言具有代表性特征的功能之一。语言具有代表性特征的功能之一。语言具有代表性特征的功能之一。C+C+语言程序设计中指语言程序设计中指语言程序设计中指语言程序设计中指针的概念是不可缺少的主要内容。利用指针可以直接对内存中各种不针的概念是不可缺

2、少的主要内容。利用指针可以直接对内存中各种不针的概念是不可缺少的主要内容。利用指针可以直接对内存中各种不针的概念是不可缺少的主要内容。利用指针可以直接对内存中各种不同数据结构的数据进行快速的处理,并且它为函数间各类数据的传递同数据结构的数据进行快速的处理,并且它为函数间各类数据的传递同数据结构的数据进行快速的处理,并且它为函数间各类数据的传递同数据结构的数据进行快速的处理,并且它为函数间各类数据的传递提供了简捷便利的方法。指针是与计算机系统内部密切相关的一种处提供了简捷便利的方法。指针是与计算机系统内部密切相关的一种处提供了简捷便利的方法。指针是与计算机系统内部密切相关的一种处提供了简捷便利的

3、方法。指针是与计算机系统内部密切相关的一种处理形式。因此,正确熟练地使用指针可以编制出简洁明快、性能强、理形式。因此,正确熟练地使用指针可以编制出简洁明快、性能强、理形式。因此,正确熟练地使用指针可以编制出简洁明快、性能强、理形式。因此,正确熟练地使用指针可以编制出简洁明快、性能强、质量高的程序。但是指针的不当使用也将产生程序失控的严重错误。质量高的程序。但是指针的不当使用也将产生程序失控的严重错误。质量高的程序。但是指针的不当使用也将产生程序失控的严重错误。质量高的程序。但是指针的不当使用也将产生程序失控的严重错误。因此,充分理解和全面掌握指针的概念和使用特点,是学习因此,充分理解和全面掌握

4、指针的概念和使用特点,是学习因此,充分理解和全面掌握指针的概念和使用特点,是学习因此,充分理解和全面掌握指针的概念和使用特点,是学习C+C+程序程序程序程序设计的重点内容之一。本任务将全面讲述指针的概念以及它在数据处设计的重点内容之一。本任务将全面讲述指针的概念以及它在数据处设计的重点内容之一。本任务将全面讲述指针的概念以及它在数据处设计的重点内容之一。本任务将全面讲述指针的概念以及它在数据处理中的使用特点。理中的使用特点。理中的使用特点。理中的使用特点。下一页返回任务任务1指针概述指针概述内存中任何一个可标识的存储区域内存中任何一个可标识的存储区域内存中任何一个可标识的存储区域内存中任何一个

5、可标识的存储区域(如简单变量、数组、函数等实体如简单变量、数组、函数等实体如简单变量、数组、函数等实体如简单变量、数组、函数等实体)都有一个地址,这个地址就是该存储区域的首地址。在计算机中,按都有一个地址,这个地址就是该存储区域的首地址。在计算机中,按都有一个地址,这个地址就是该存储区域的首地址。在计算机中,按都有一个地址,这个地址就是该存储区域的首地址。在计算机中,按照内存的地址就可以访问该存储区域里的内容,即按地址来读写该存照内存的地址就可以访问该存储区域里的内容,即按地址来读写该存照内存的地址就可以访问该存储区域里的内容,即按地址来读写该存照内存的地址就可以访问该存储区域里的内容,即按地

6、址来读写该存储区域里的数据。储区域里的数据。储区域里的数据。储区域里的数据。C+C+是一种具有低级语言功能的高级语言,它的一是一种具有低级语言功能的高级语言,它的一是一种具有低级语言功能的高级语言,它的一是一种具有低级语言功能的高级语言,它的一个重要的特点就是允许在程序中引用一个变量的地址。在个重要的特点就是允许在程序中引用一个变量的地址。在个重要的特点就是允许在程序中引用一个变量的地址。在个重要的特点就是允许在程序中引用一个变量的地址。在C+C+中,指中,指中,指中,指针是用于定位其他程序实体的一种数据类型,它包含了所指对象的地针是用于定位其他程序实体的一种数据类型,它包含了所指对象的地针是

7、用于定位其他程序实体的一种数据类型,它包含了所指对象的地针是用于定位其他程序实体的一种数据类型,它包含了所指对象的地址,所以,变量的地址就是变量的指针。址,所以,变量的地址就是变量的指针。址,所以,变量的地址就是变量的指针。址,所以,变量的地址就是变量的指针。上一页 下一页返回任务任务1指针概述指针概述 地址也是一个值,也可以存放在变量中,存放地址的变量称为指针变地址也是一个值,也可以存放在变量中,存放地址的变量称为指针变地址也是一个值,也可以存放在变量中,存放地址的变量称为指针变地址也是一个值,也可以存放在变量中,存放地址的变量称为指针变量。一个指针变量里面所存放的内容一定是另一个变量在内存

8、中的地量。一个指针变量里面所存放的内容一定是另一个变量在内存中的地量。一个指针变量里面所存放的内容一定是另一个变量在内存中的地量。一个指针变量里面所存放的内容一定是另一个变量在内存中的地址。拥有这个地址的变量称为该指针变量所指向的变量。如果一个指址。拥有这个地址的变量称为该指针变量所指向的变量。如果一个指址。拥有这个地址的变量称为该指针变量所指向的变量。如果一个指址。拥有这个地址的变量称为该指针变量所指向的变量。如果一个指针不指向任何数据,则称为空指针,其地址值就是针不指向任何数据,则称为空指针,其地址值就是针不指向任何数据,则称为空指针,其地址值就是针不指向任何数据,则称为空指针,其地址值就

9、是0 0。指针也有类型,。指针也有类型,。指针也有类型,。指针也有类型,它就是指针所指向的数据的类型,因此它就是指针所指向的数据的类型,因此它就是指针所指向的数据的类型,因此它就是指针所指向的数据的类型,因此“doubledouble型指针型指针型指针型指针”是指专用于是指专用于是指专用于是指专用于指向指向指向指向doubledouble型数据的指针。型数据的指针。型数据的指针。型数据的指针。“指针指针指针指针”表达了两层含义表达了两层含义表达了两层含义表达了两层含义:一个地址以及存一个地址以及存一个地址以及存一个地址以及存储于该地址处的数据的类型,因此在概念上与储于该地址处的数据的类型,因此

10、在概念上与储于该地址处的数据的类型,因此在概念上与储于该地址处的数据的类型,因此在概念上与“地址地址地址地址”还是有区别的。还是有区别的。还是有区别的。还是有区别的。)上一页返回任务任务2 指针类型指针类型 指针是一个变量,因此指针也有相关的类型。但是和普通变量不同的指针是一个变量,因此指针也有相关的类型。但是和普通变量不同的指针是一个变量,因此指针也有相关的类型。但是和普通变量不同的指针是一个变量,因此指针也有相关的类型。但是和普通变量不同的是,不同数据类型的指针之间的区别不是在指针的表示上,也不在指是,不同数据类型的指针之间的区别不是在指针的表示上,也不在指是,不同数据类型的指针之间的区别

11、不是在指针的表示上,也不在指是,不同数据类型的指针之间的区别不是在指针的表示上,也不在指针所持有的值上,指针的类型指的是指针所指向的数据的类型,所以针所持有的值上,指针的类型指的是指针所指向的数据的类型,所以针所持有的值上,指针的类型指的是指针所指向的数据的类型,所以针所持有的值上,指针的类型指的是指针所指向的数据的类型,所以指针的类型必须和所指向的变量的类型相匹配。指针的类型必须和所指向的变量的类型相匹配。指针的类型必须和所指向的变量的类型相匹配。指针的类型必须和所指向的变量的类型相匹配。6.2.1指针常量指针常量 空指针的地址值空指针的地址值空指针的地址值空指针的地址值0 0可以用符号常量

12、可以用符号常量可以用符号常量可以用符号常量NULLNULL表示。表示。表示。表示。NULL(NULL(或或或或oo是是是是c+c+中中中中经常用到的指针常量。经常用到的指针常量。经常用到的指针常量。经常用到的指针常量。6.2.2 指针变量指针变量下一页返回任务任务2 指针类型指针类型6.2.2 指针变量指针变量 1.1.什么是指针变量什么是指针变量什么是指针变量什么是指针变量 指针变量就是存放地址的变量,指针变量的类型就是存放于其中的指针变量就是存放地址的变量,指针变量的类型就是存放于其中的指针变量就是存放地址的变量,指针变量的类型就是存放于其中的指针变量就是存放地址的变量,指针变量的类型就是

13、存放于其中的指针指针指针指针(地址地址地址地址)所指向的数据的类型。定义指针变量采用格式所指向的数据的类型。定义指针变量采用格式所指向的数据的类型。定义指针变量采用格式所指向的数据的类型。定义指针变量采用格式:类型修饰符类型修饰符类型修饰符类型修饰符*变量名变量名变量名变量名=指针表达式指针表达式指针表达式指针表达式 上一页 下一页返回任务任务2 指针类型指针类型其中第一个语句定义厂两个类型相同其中第一个语句定义厂两个类型相同其中第一个语句定义厂两个类型相同其中第一个语句定义厂两个类型相同(都是整型都是整型都是整型都是整型)的指针变量的指针变量的指针变量的指针变量;第二个语第二个语第二个语第二

14、个语句定义厂一个双精度的简单变量句定义厂一个双精度的简单变量句定义厂一个双精度的简单变量句定义厂一个双精度的简单变量d d和两个双精度指针变量和两个双精度指针变量和两个双精度指针变量和两个双精度指针变量x1x1和和和和x2x2,而,而,而,而且这两个变量均被初始化为指向且这两个变量均被初始化为指向且这两个变量均被初始化为指向且这两个变量均被初始化为指向d;d;最后一个语句定义一个字符型指针最后一个语句定义一个字符型指针最后一个语句定义一个字符型指针最后一个语句定义一个字符型指针变量变量变量变量s s,并被初始化为指向一个字符串常量的首部。指针变量可以和,并被初始化为指向一个字符串常量的首部。指

15、针变量可以和,并被初始化为指向一个字符串常量的首部。指针变量可以和,并被初始化为指向一个字符串常量的首部。指针变量可以和其他类型变量在一个语句中定义。其他类型变量在一个语句中定义。其他类型变量在一个语句中定义。其他类型变量在一个语句中定义。注意注意注意注意:指针定义时指定的数据类型不是指针变量本身的数据类型。因为指针定义时指定的数据类型不是指针变量本身的数据类型。因为指针定义时指定的数据类型不是指针变量本身的数据类型。因为指针定义时指定的数据类型不是指针变量本身的数据类型。因为指针变量保持的内容总是地址量。机器硬件不同,地址量的数据长度指针变量保持的内容总是地址量。机器硬件不同,地址量的数据长

16、度指针变量保持的内容总是地址量。机器硬件不同,地址量的数据长度指针变量保持的内容总是地址量。机器硬件不同,地址量的数据长度不同。因此,指针本身的数据长度是由编译系统决定的,它与机器的不同。因此,指针本身的数据长度是由编译系统决定的,它与机器的不同。因此,指针本身的数据长度是由编译系统决定的,它与机器的不同。因此,指针本身的数据长度是由编译系统决定的,它与机器的地址字长相适应。指针定义时指定的数据类型,是指针用于保存的地地址字长相适应。指针定义时指定的数据类型,是指针用于保存的地地址字长相适应。指针定义时指定的数据类型,是指针用于保存的地地址字长相适应。指针定义时指定的数据类型,是指针用于保存的

17、地址值中存储的变量的数据类型,即指针所指向变量的数据类型。址值中存储的变量的数据类型,即指针所指向变量的数据类型。址值中存储的变量的数据类型,即指针所指向变量的数据类型。址值中存储的变量的数据类型,即指针所指向变量的数据类型。上一页 下一页返回任务任务2 指针类型指针类型可以采用可以采用可以采用可以采用voidvoid作为类型修饰符,从而定义一个不与任何具体类型相联作为类型修饰符,从而定义一个不与任何具体类型相联作为类型修饰符,从而定义一个不与任何具体类型相联作为类型修饰符,从而定义一个不与任何具体类型相联系的指针。这样的指针称为系的指针。这样的指针称为系的指针。这样的指针称为系的指针。这样的

18、指针称为voidvoid指针或无类型指针,可用来指向任何指针或无类型指针,可用来指向任何指针或无类型指针,可用来指向任何指针或无类型指针,可用来指向任何类型的数据。其他类型的指针可以赋值给类型的数据。其他类型的指针可以赋值给类型的数据。其他类型的指针可以赋值给类型的数据。其他类型的指针可以赋值给voidvoid指针,但反过来却不行,指针,但反过来却不行,指针,但反过来却不行,指针,但反过来却不行,例如例如例如例如:注意注意注意注意:NULL:NULL是一个指针常量,表示指针不指向任何地址,该值可赋给是一个指针常量,表示指针不指向任何地址,该值可赋给是一个指针常量,表示指针不指向任何地址,该值可

19、赋给是一个指针常量,表示指针不指向任何地址,该值可赋给任何指针变量。常用来给指针初始化。而任何指针变量。常用来给指针初始化。而任何指针变量。常用来给指针初始化。而任何指针变量。常用来给指针初始化。而*voidvoid是一种指针类型,是是一种指针类型,是是一种指针类型,是是一种指针类型,是空指针类型。空指针类型。空指针类型。空指针类型。上一页 下一页返回任务任务2 指针类型指针类型2.2.指针变量的间接引用指针变量的间接引用指针变量的间接引用指针变量的间接引用 一个实体可以直接用其标识符表示,也可以用指向它的指针表示。一个实体可以直接用其标识符表示,也可以用指向它的指针表示。一个实体可以直接用其

20、标识符表示,也可以用指向它的指针表示。一个实体可以直接用其标识符表示,也可以用指向它的指针表示。用指针表示它所指向的实体,称为指针的间接引用。如下面的一段程用指针表示它所指向的实体,称为指针的间接引用。如下面的一段程用指针表示它所指向的实体,称为指针的间接引用。如下面的一段程用指针表示它所指向的实体,称为指针的间接引用。如下面的一段程序序序序:语句语句语句语句*pf1=3.1415926;pf1=3.1415926;中的中的中的中的*pf1 pf1 是指是指是指是指pf1pf1所指向的变量所指向的变量所指向的变量所指向的变量f1f1。上述引用的。上述引用的。上述引用的。上述引用的是是是是*pf

21、1pf1,并不是直接引用,并不是直接引用,并不是直接引用,并不是直接引用f1f1。这称为变量。这称为变量。这称为变量。这称为变量f1f1的间接引用。记号的间接引用。记号的间接引用。记号的间接引用。记号*称为间称为间称为间称为间接引用运算符。它与取地址运算符具有相同的优先级别与结合性,并接引用运算符。它与取地址运算符具有相同的优先级别与结合性,并接引用运算符。它与取地址运算符具有相同的优先级别与结合性,并接引用运算符。它与取地址运算符具有相同的优先级别与结合性,并互为逆运算。互为逆运算。互为逆运算。互为逆运算。上一页 下一页返回任务任务2 指针类型指针类型应当注意,声明语句应当注意,声明语句应当

22、注意,声明语句应当注意,声明语句 float*pf=&f1;float*pf=&f1;中的中的中的中的*与赋值语句与赋值语句与赋值语句与赋值语句 *pf=3.1415926pf=3.1415926中的中的中的中的*的意义大不相同。前者是个指针运算符,它与的意义大不相同。前者是个指针运算符,它与的意义大不相同。前者是个指针运算符,它与的意义大不相同。前者是个指针运算符,它与floatfloat结合为结合为结合为结合为“指指指指向向向向floatfloat的指针的指针的指针的指针”类型。后者是间接引用运算符。二者不可混淆类型。后者是间接引用运算符。二者不可混淆类型。后者是间接引用运算符。二者不可混

23、淆类型。后者是间接引用运算符。二者不可混淆 对于语句对于语句对于语句对于语句float f;float f;float*pf=&ffloat*pf=&f上一页 下一页返回任务任务2 指针类型指针类型上一页返回任务任务3指针的运算指针的运算 指针是一种数据类型,应具有无符号整数的值。由于地址本身的特征,指针是一种数据类型,应具有无符号整数的值。由于地址本身的特征,指针是一种数据类型,应具有无符号整数的值。由于地址本身的特征,指针是一种数据类型,应具有无符号整数的值。由于地址本身的特征,也给指针的运算带来一些限制,它只能进行也给指针的运算带来一些限制,它只能进行也给指针的运算带来一些限制,它只能进

24、行也给指针的运算带来一些限制,它只能进行与整数相加、减运算与整数相加、减运算与整数相加、减运算与整数相加、减运算;同一数组中各元素地址间的关系运算与相减运算同一数组中各元素地址间的关系运算与相减运算同一数组中各元素地址间的关系运算与相减运算同一数组中各元素地址间的关系运算与相减运算;赋值运算。赋值运算。赋值运算。赋值运算。其它的运算,如两个指针相加、相乘、相除、移位以及指针与实数其它的运算,如两个指针相加、相乘、相除、移位以及指针与实数其它的运算,如两个指针相加、相乘、相除、移位以及指针与实数其它的运算,如两个指针相加、相乘、相除、移位以及指针与实数相加等都是不允许的。相加等都是不允许的。相加

25、等都是不允许的。相加等都是不允许的。6.3.1指针与整数相加、减指针与整数相加、减 指针与整数相加、减,表示指针在内存空间向下、上移动,移动以其指针与整数相加、减,表示指针在内存空间向下、上移动,移动以其指针与整数相加、减,表示指针在内存空间向下、上移动,移动以其指针与整数相加、减,表示指针在内存空间向下、上移动,移动以其类型长度为单位。类型长度为单位。类型长度为单位。类型长度为单位。intint型指针的移动单位是型指针的移动单位是型指针的移动单位是型指针的移动单位是2 2字节,即字节,即字节,即字节,即intint型指针加型指针加型指针加型指针加1 1,向,向,向,向下移动下移动下移动下移动

26、2 2字节,减字节,减字节,减字节,减1 1向上移动向上移动向上移动向上移动2 2字节。字节。字节。字节。floatfloat型指针的移动单位是型指针的移动单位是型指针的移动单位是型指针的移动单位是4 4字节。字节。字节。字节。图图图图6-16-1为指针与整数相加减时指针移动示意图。为指针与整数相加减时指针移动示意图。为指针与整数相加减时指针移动示意图。为指针与整数相加减时指针移动示意图。下一页返回任务任务3指针的运算指针的运算6.3.2指向同一数组中的元素的指针的关系运算指向同一数组中的元素的指针的关系运算与相减运算与相减运算指向同一数组中的元素的指针的关系运算,是比较它们之间的地址大指向同

27、一数组中的元素的指针的关系运算,是比较它们之间的地址大指向同一数组中的元素的指针的关系运算,是比较它们之间的地址大指向同一数组中的元素的指针的关系运算,是比较它们之间的地址大小。两个指针相等,表明它们指向同一数组元素。小。两个指针相等,表明它们指向同一数组元素。小。两个指针相等,表明它们指向同一数组元素。小。两个指针相等,表明它们指向同一数组元素。两个指向同一数组中的元素的指针相减,是计算它们之间的元素数两个指向同一数组中的元素的指针相减,是计算它们之间的元素数两个指向同一数组中的元素的指针相减,是计算它们之间的元素数两个指向同一数组中的元素的指针相减,是计算它们之间的元素数日。日。日。日。6

28、.3.3 指针赋值指针赋值指针可以通过赋值运算改变其所指向的实体。指针的赋值运算有以下指针可以通过赋值运算改变其所指向的实体。指针的赋值运算有以下指针可以通过赋值运算改变其所指向的实体。指针的赋值运算有以下指针可以通过赋值运算改变其所指向的实体。指针的赋值运算有以下三种情形。三种情形。三种情形。三种情形。上一页 下一页返回任务任务3指针的运算指针的运算(1)(1)给指针赋一个对应类型的变量地址。如给指针赋一个对应类型的变量地址。如给指针赋一个对应类型的变量地址。如给指针赋一个对应类型的变量地址。如:执行情况如执行情况如执行情况如执行情况如图图图图6-26-2所示。每一次赋值都会改变指针所示。每

29、一次赋值都会改变指针所示。每一次赋值都会改变指针所示。每一次赋值都会改变指针pfpf的指向。的指向。的指向。的指向。(2)(2)同类型指针间的赋值。如同类型指针间的赋值。如同类型指针间的赋值。如同类型指针间的赋值。如上一页 下一页返回任务任务3指针的运算指针的运算 执行情况如执行情况如执行情况如执行情况如图图图图6-36-3示。用一个指针给另一个同类型指针赋值,会使两示。用一个指针给另一个同类型指针赋值,会使两示。用一个指针给另一个同类型指针赋值,会使两示。用一个指针给另一个同类型指针赋值,会使两个指针指向同一变量个指针指向同一变量个指针指向同一变量个指针指向同一变量 (3)(3)指针增指针增

30、指针增指针增1,1,减减减减1 1,即指针向下或向上移动一个所指向的数据类型空间。,即指针向下或向上移动一个所指向的数据类型空间。,即指针向下或向上移动一个所指向的数据类型空间。,即指针向下或向上移动一个所指向的数据类型空间。增增增增1,1,减减减减1 1运算符与运算符与运算符与运算符与*优先级别相同,它们在同一个表达式中时,应按结优先级别相同,它们在同一个表达式中时,应按结优先级别相同,它们在同一个表达式中时,应按结优先级别相同,它们在同一个表达式中时,应按结合性决定运算顺序合性决定运算顺序合性决定运算顺序合性决定运算顺序.如如如如它们的执行示意情况如它们的执行示意情况如它们的执行示意情况如

31、它们的执行示意情况如图图图图6-46-4.上一页返回任务任务4指针与数组指针与数组 在在在在C+C+中,指针和数组的关系十分密切。数组是由多个数组元素构成,中,指针和数组的关系十分密切。数组是由多个数组元素构成,中,指针和数组的关系十分密切。数组是由多个数组元素构成,中,指针和数组的关系十分密切。数组是由多个数组元素构成,整个数组占用存储器中一块连续的存储器空间,每个数组元素都要占整个数组占用存储器中一块连续的存储器空间,每个数组元素都要占整个数组占用存储器中一块连续的存储器空间,每个数组元素都要占整个数组占用存储器中一块连续的存储器空间,每个数组元素都要占用存储单元,它们都有相应的地址。数组

32、占用存储空间的的大小等于用存储单元,它们都有相应的地址。数组占用存储空间的的大小等于用存储单元,它们都有相应的地址。数组占用存储空间的的大小等于用存储单元,它们都有相应的地址。数组占用存储空间的的大小等于所有数组元素的个数乘以数组元素类型的长度。通过数组元素地址,所有数组元素的个数乘以数组元素类型的长度。通过数组元素地址,所有数组元素的个数乘以数组元素类型的长度。通过数组元素地址,所有数组元素的个数乘以数组元素类型的长度。通过数组元素地址,可以访问数组元素。可以访问数组元素。可以访问数组元素。可以访问数组元素。6.4.1 数组的指针数组的指针 数组名就是指针,且数组名还是指针常量,这就意味着其

33、值不能改变。数组名就是指针,且数组名还是指针常量,这就意味着其值不能改变。数组名就是指针,且数组名还是指针常量,这就意味着其值不能改变。数组名就是指针,且数组名还是指针常量,这就意味着其值不能改变。对于一维数组来说,数组名是指向数组第一个元素的指针,即指向数对于一维数组来说,数组名是指向数组第一个元素的指针,即指向数对于一维数组来说,数组名是指向数组第一个元素的指针,即指向数对于一维数组来说,数组名是指向数组第一个元素的指针,即指向数组的首地址,若数组名加组的首地址,若数组名加组的首地址,若数组名加组的首地址,若数组名加1 1,则是指向数组第二个元素的指针,依次,则是指向数组第二个元素的指针,

34、依次,则是指向数组第二个元素的指针,依次,则是指向数组第二个元素的指针,依次类推。类推。类推。类推。下一页返回任务任务4指针与数组指针与数组 例例例例6-16-1中定义厂名为中定义厂名为中定义厂名为中定义厂名为a a的数组,数组名的数组,数组名的数组,数组名的数组,数组名a a是指向是指向是指向是指向a0a0元素的指针,元素的指针,元素的指针,元素的指针,*a a表示表示表示表示a0a0元素的值。元素的值。元素的值。元素的值。a+1a+1是指向是指向是指向是指向a1a1元素的指针,元素的指针,元素的指针,元素的指针,*(a+1)(a+1)表示表示表示表示a1a1元素的值。元素的值。元素的值。元

35、素的值。a+2a+2是指向是指向是指向是指向a2a2元素的指针,元素的指针,元素的指针,元素的指针,*(a+2)(a+2)表示表示表示表示a2a2元素的值。通过数组指针元素的值。通过数组指针元素的值。通过数组指针元素的值。通过数组指针也可以访问数组元素。也可以访问数组元素。也可以访问数组元素。也可以访问数组元素。上一页 下一页返回任务任务4指针与数组指针与数组程序输出结果:程序输出结果:程序输出结果:程序输出结果:1 11 12 22 23 33 3上一页 下一页返回任务任务4指针与数组指针与数组6.4.2 数组元素的指针形式数组元素的指针形式上一页 下一页返回任务任务4指针与数组指针与数组上

36、一页 下一页返回任务任务4指针与数组指针与数组这些对应关系使我们有可能用数组名指针来引用数组的元素,称为数这些对应关系使我们有可能用数组名指针来引用数组的元素,称为数这些对应关系使我们有可能用数组名指针来引用数组的元素,称为数这些对应关系使我们有可能用数组名指针来引用数组的元素,称为数组元素的指针形式组元素的指针形式组元素的指针形式组元素的指针形式上一页 下一页返回任务任务4指针与数组指针与数组上一页 下一页返回任务任务4指针与数组指针与数组通常把二维数组的数组名称为该数组的行指针,把其下一级指针称为通常把二维数组的数组名称为该数组的行指针,把其下一级指针称为通常把二维数组的数组名称为该数组的

37、行指针,把其下一级指针称为通常把二维数组的数组名称为该数组的行指针,把其下一级指针称为列指针。例列指针。例列指针。例列指针。例6-26-2是一个使用列指针的例子。下面是一个使用行指针的例是一个使用列指针的例子。下面是一个使用行指针的例是一个使用列指针的例子。下面是一个使用行指针的例是一个使用列指针的例子。下面是一个使用行指针的例子。子。子。子。上一页 下一页返回任务任务4指针与数组指针与数组上一页 下一页返回任务任务4指针与数组指针与数组6.4.3 数组的指针变量数组的指针变量在在在在C+C+中也可以定义一个指针变量,用来存放数组的地址。这样就使中也可以定义一个指针变量,用来存放数组的地址。这

38、样就使中也可以定义一个指针变量,用来存放数组的地址。这样就使中也可以定义一个指针变量,用来存放数组的地址。这样就使指针变量与数组建立起厂联系,以便通过指针变量来访问数组的元素。指针变量与数组建立起厂联系,以便通过指针变量来访问数组的元素。指针变量与数组建立起厂联系,以便通过指针变量来访问数组的元素。指针变量与数组建立起厂联系,以便通过指针变量来访问数组的元素。上一页 下一页返回任务任务4指针与数组指针与数组上一页 下一页返回任务任务4指针与数组指针与数组程序中通过语句程序中通过语句程序中通过语句程序中通过语句p=a;p=a;使指针变量使指针变量使指针变量使指针变量p p与数组与数组与数组与数组

39、a a建立联系,即建立联系,即建立联系,即建立联系,即p p是存放是存放是存放是存放a a数组数组数组数组指针的指针变量指针的指针变量指针的指针变量指针的指针变量.6.4.4 指向数组的指针变量指向数组的指针变量数组名指针是指针常量,使用起来还不够灵活。具有更大的灵活性的数组名指针是指针常量,使用起来还不够灵活。具有更大的灵活性的数组名指针是指针常量,使用起来还不够灵活。具有更大的灵活性的数组名指针是指针常量,使用起来还不够灵活。具有更大的灵活性的是指向数组的指针变量。它与数组名指针不同之处在于,它可以通过是指向数组的指针变量。它与数组名指针不同之处在于,它可以通过是指向数组的指针变量。它与数

40、组名指针不同之处在于,它可以通过是指向数组的指针变量。它与数组名指针不同之处在于,它可以通过赋值指向类型相同的其它数组,而数组名只能固定地指向某一数组。赋值指向类型相同的其它数组,而数组名只能固定地指向某一数组。赋值指向类型相同的其它数组,而数组名只能固定地指向某一数组。赋值指向类型相同的其它数组,而数组名只能固定地指向某一数组。一维数组的指针是直接指向第一维数组的指针是直接指向第一维数组的指针是直接指向第一维数组的指针是直接指向第0 0个元素数据的。个元素数据的。个元素数据的。个元素数据的。图图图图4-54-5为指向一维数为指向一维数为指向一维数为指向一维数组的指针与数组名指针以及下标变量间

41、的对应关系示意图。组的指针与数组名指针以及下标变量间的对应关系示意图。组的指针与数组名指针以及下标变量间的对应关系示意图。组的指针与数组名指针以及下标变量间的对应关系示意图。上一页 下一页返回任务任务4指针与数组指针与数组上一页 下一页返回任务任务4指针与数组指针与数组运行结果运行结果运行结果运行结果1,2,3,4,51,2,3,4,5,对于多维数组来说,第一维不必指出,但必须指出从第二维开始的各对于多维数组来说,第一维不必指出,但必须指出从第二维开始的各对于多维数组来说,第一维不必指出,但必须指出从第二维开始的各对于多维数组来说,第一维不必指出,但必须指出从第二维开始的各维的大小。如对如下数

42、组维的大小。如对如下数组维的大小。如对如下数组维的大小。如对如下数组:int b35;int b35;int c358;int c358;指向它们的指针变量的声明语句应为指向它们的指针变量的声明语句应为指向它们的指针变量的声明语句应为指向它们的指针变量的声明语句应为int(*pb)5;int(*pb)5;int(*pc)58;int(*pc)58;参照例参照例参照例参照例6-36-3可以得到下面的例子可以得到下面的例子可以得到下面的例子可以得到下面的例子上一页 下一页返回任务任务4指针与数组指针与数组上一页 下一页返回任务任务4指针与数组指针与数组上一页 下一页返回任务任务4指针与数组指针与数

43、组运行结果运行结果运行结果运行结果:11 11,1212,1313,1414,15,21,22,23,24,25,31,32,33,34,3515,21,22,23,24,25,31,32,33,34,35,程序中,使用厂表达式程序中,使用厂表达式程序中,使用厂表达式程序中,使用厂表达式pb+;pb+;这说明厂指向数组的指针变量是一个这说明厂指向数组的指针变量是一个这说明厂指向数组的指针变量是一个这说明厂指向数组的指针变量是一个可修改的左值,而数组名指针是个常量。可修改的左值,而数组名指针是个常量。可修改的左值,而数组名指针是个常量。可修改的左值,而数组名指针是个常量。*(pb+i)(pb+i

44、)也可以写成也可以写成也可以写成也可以写成pbipbi的形式,即的形式,即的形式,即的形式,即pbipbi与与与与bibi相当,并且相当,并且相当,并且相当,并且pbijpbij与与与与bi jbi j相当。请看下例相当。请看下例相当。请看下例相当。请看下例上一页 下一页返回任务任务4指针与数组指针与数组上一页 下一页返回任务任务4指针与数组指针与数组上一页 下一页返回任务任务4指针与数组指针与数组运行结果运行结果运行结果运行结果:1111,1212,1313,14,1514,152121,22,23,24,2522,23,24,25,31,32,33,34,3531,32,33,34,35上

45、一页返回任务任务5指针与字符串指针与字符串6.5.1字符串的处理方式字符串的处理方式 在在在在C+C+中,并没有设置专门的字符串类型,而是通过字符数组处理字中,并没有设置专门的字符串类型,而是通过字符数组处理字中,并没有设置专门的字符串类型,而是通过字符数组处理字中,并没有设置专门的字符串类型,而是通过字符数组处理字符串,对于一个存储字符串的数组,其数组名就是指向其字符串的指符串,对于一个存储字符串的数组,其数组名就是指向其字符串的指符串,对于一个存储字符串的数组,其数组名就是指向其字符串的指符串,对于一个存储字符串的数组,其数组名就是指向其字符串的指针,因为它的值就是字符串中每一个字符在存储

46、器中的地址。在针,因为它的值就是字符串中每一个字符在存储器中的地址。在针,因为它的值就是字符串中每一个字符在存储器中的地址。在针,因为它的值就是字符串中每一个字符在存储器中的地址。在C+C+中,指向一个字符串中任意一个字符位置的指针都是一个指向字符串中,指向一个字符串中任意一个字符位置的指针都是一个指向字符串中,指向一个字符串中任意一个字符位置的指针都是一个指向字符串中,指向一个字符串中任意一个字符位置的指针都是一个指向字符串的指针,只不过这个字符串是从所指示的位置开始,到末尾空字符为的指针,只不过这个字符串是从所指示的位置开始,到末尾空字符为的指针,只不过这个字符串是从所指示的位置开始,到末

47、尾空字符为的指针,只不过这个字符串是从所指示的位置开始,到末尾空字符为止,是整个字符串的一个子串止,是整个字符串的一个子串止,是整个字符串的一个子串止,是整个字符串的一个子串.例如,若先定义一个字符类型的数组,例如,若先定义一个字符类型的数组,例如,若先定义一个字符类型的数组,例如,若先定义一个字符类型的数组,并将一字符串存储在数组中,其形式如下并将一字符串存储在数组中,其形式如下并将一字符串存储在数组中,其形式如下并将一字符串存储在数组中,其形式如下:下一页返回任务任务5指针与字符串指针与字符串 第一个语句是说明建立厂一个具有第一个语句是说明建立厂一个具有第一个语句是说明建立厂一个具有第一个

48、语句是说明建立厂一个具有3030个元素的数组个元素的数组个元素的数组个元素的数组strlstrl,并将字符串,并将字符串,并将字符串,并将字符串 This is a book.This is a book.存人其中。在定义第二个存人其中。在定义第二个存人其中。在定义第二个存人其中。在定义第二个str2str2数组时,没有给出数组数组时,没有给出数组数组时,没有给出数组数组时,没有给出数组的大小,系统会根据后面字符串的长短自动定义数组的大小。上面的的大小,系统会根据后面字符串的长短自动定义数组的大小。上面的的大小,系统会根据后面字符串的长短自动定义数组的大小。上面的的大小,系统会根据后面字符串的

49、长短自动定义数组的大小。上面的两个数组不仅将一些字符存人数组,而且还在数组的最后加上厂一个两个数组不仅将一些字符存人数组,而且还在数组的最后加上厂一个两个数组不仅将一些字符存人数组,而且还在数组的最后加上厂一个两个数组不仅将一些字符存人数组,而且还在数组的最后加上厂一个“0”0”作为字符串的结束标志。也就是说,虽然第一个数组的长度是作为字符串的结束标志。也就是说,虽然第一个数组的长度是作为字符串的结束标志。也就是说,虽然第一个数组的长度是作为字符串的结束标志。也就是说,虽然第一个数组的长度是3030,但给定的字符串只占用,但给定的字符串只占用,但给定的字符串只占用,但给定的字符串只占用1616

50、个字节,其中前个字节,其中前个字节,其中前个字节,其中前115115个字节存放字符,个字节存放字符,个字节存放字符,个字节存放字符,第第第第1616个字节存放个字节存放个字节存放个字节存放“00,这是字符串的结束标志。,这是字符串的结束标志。,这是字符串的结束标志。,这是字符串的结束标志。在定义在定义在定义在定义str2str2数组时没有给出数组长度,系统根据给出的字符串数组时没有给出数组长度,系统根据给出的字符串数组时没有给出数组长度,系统根据给出的字符串数组时没有给出数组长度,系统根据给出的字符串 hello”hello”为数组分配为数组分配为数组分配为数组分配6 6个字节,其中前个字节,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com