(中职)编程语言基础------C++模块6教学课件.ppt
《(中职)编程语言基础------C++模块6教学课件.ppt》由会员分享,可在线阅读,更多相关《(中职)编程语言基础------C++模块6教学课件.ppt(67页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、YCF正版可修改PPT(中职)编程语言基础-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
12、0可以用符号常量可以用符号常量可以用符号常量可以用符号常量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。上述引用的。上述引用的。上述引用的。上述引用
21、的是是是是*pf1pf1,并不是直接引用,并不是直接引用,并不是直接引用,并不是直接引用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,向,向,向,向下移动下
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编程 语言 基础 C+ 模块 教学 课件
限制150内