(中职)编程语言基础——C语言模块7教学课件.ppt
-
资源ID:90022247
资源大小:1.74MB
全文页数:70页
- 资源格式: PPT
下载积分:30金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
(中职)编程语言基础——C语言模块7教学课件.ppt
YCF正版可修改PPT(中职)编程语言基础C语言模块7教学课件模块模块7指针指针任务任务1 指针的概念指针的概念任务任务2 指向简单变量的指针指向简单变量的指针任务任务3 指针与数组指针与数组任务任务4 指向字符串的指针变量指向字符串的指针变量任务任务5 指向函数的指针变量指向函数的指针变量任务任务6 指针变量作为函数参数指针变量作为函数参数任务任务7 指向结构体变量的指针指向结构体变量的指针任务任务1指针的概念指针的概念程序中的变量在运行时要占用内存单元,用来存放变量的内程序中的变量在运行时要占用内存单元,用来存放变量的内容。内存单元按顺序编号,称为内存地址,它相当于门牌号,容。内存单元按顺序编号,称为内存地址,它相当于门牌号,系统根据内存地址存取数据。系统根据内存地址存取数据。在在C语言中,指针是一种数据类型,指针变量是用来专门存放语言中,指针是一种数据类型,指针变量是用来专门存放所指对象地址的变量,也就是说,数据值是存放在指针所指所指对象地址的变量,也就是说,数据值是存放在指针所指的对象中,而不是在指针变量中。例如,我们定义了一个变的对象中,而不是在指针变量中。例如,我们定义了一个变量量px,把,把x的地址的地址1000存放在变量存放在变量px中,通过中,通过px可以间接可以间接地访问地访问x变量。变量。px就是指向就是指向x的指针变量,的指针变量,px和它所指对象和它所指对象x的关系如的关系如图图7-1所示。所示。返回任务任务2指向简单变量的指针指向简单变量的指针7.2.1 指针变量的定义指针变量的定义指针变量在指针变量在C语言中是一个重要的概念,指针变量定义的一般语言中是一个重要的概念,指针变量定义的一般形式为形式为:其含义是其含义是:指明标识符是存放某类型变量的地址变量,又称标指明标识符是存放某类型变量的地址变量,又称标识符为指向类型标识符的指定变量,简称标识符为指向类型识符为指向类型标识符的指定变量,简称标识符为指向类型标识符的指针。标识符的指针。例如例如int*px,x;表明表明px是指向某一整型变量的指针变量。是指向某一整型变量的指针变量。指针变量是一个变量,是存放地址的变量。设有一个指针变指针变量是一个变量,是存放地址的变量。设有一个指针变量量px,若把变量,若把变量x的地址赋给的地址赋给px,即,即:返回下一页任务任务2指向简单变量的指针指向简单变量的指针则变量则变量x的地址被放入指针变量的地址被放入指针变量px的存储空间中,其关系如的存储空间中,其关系如图图7-2所示。所示。当指针得到某一地址时,称该指针指向了那个地址的存储空间当指针得到某一地址时,称该指针指向了那个地址的存储空间;指针指向的存储区域中的数据称为指针的目标。指针指向的存储区域中的数据称为指针的目标。在程序中用在程序中用“*”表示指针的目标,即表示指针的目标,即:*px表示的是表示的是px的目标的目标x。其实其实*px是一个运算表达式,也就是说是一个运算表达式,也就是说:“*”是一个运算符,称是一个运算符,称为访问目标运算符,它只有一个运算量,而且必须是地址量。为访问目标运算符,它只有一个运算量,而且必须是地址量。在对指针的实际运用中,经常会用到以下操作。在对指针的实际运用中,经常会用到以下操作。对指针变量赋地址,即指针的初始化对指针变量赋地址,即指针的初始化;利用指针可以间接访问变量。利用指针可以间接访问变量。上一页返回下一页任务任务2指向简单变量的指针指向简单变量的指针【例例7-1】使用指针实现对变量的间接访问。使用指针实现对变量的间接访问。上一页返回下一页任务任务2指向简单变量的指针指向简单变量的指针7.2.2 指针的用途和用法指针的用途和用法由于指针是一种存放变量地址的特殊变量,因而为指针初始由于指针是一种存放变量地址的特殊变量,因而为指针初始化的方法就是将化的方法就是将1个变量的地址赋给个变量的地址赋给1个指针变量。个指针变量。(1)取地址运算符取地址运算符”&”。在。在C程序设计中,程序设计中,1个变量在内存中个变量在内存中存放时具有确定的地址,但是对于程序设计者来说,具体地存放时具有确定的地址,但是对于程序设计者来说,具体地址是多少并不重要。使用取地址运算符址是多少并不重要。使用取地址运算符”&”可以获得可以获得1个变个变量在内存中的地址。量在内存中的地址。上一页返回下一页任务任务2指向简单变量的指针指向简单变量的指针(2)将变量地址赋给指针。程序中的语句组将变量地址赋给指针。程序中的语句组”p=&a;q=&b;”的功能是把整型变量的功能是把整型变量a、b的地址赋给指针的地址赋给指针变量变量p、q,这就是对指针变量的赋值操作。,这就是对指针变量的赋值操作。注意注意:对指针变量所赋的值一定是地址值。我们可以使用对指针变量所赋的值一定是地址值。我们可以使用3种种地址值地址值:变量的地址变量的地址:其表示方法为其表示方法为&变量名,如程序中变量名,如程序中&a和和&b数组名数组名:数组名表示数组的首地址。数组名表示数组的首地址。已经定向的指针已经定向的指针:其中保存了其中保存了1个变量的地址。个变量的地址。上一页返回下一页任务任务2指向简单变量的指针指向简单变量的指针(3)取内容运算符取内容运算符“*”。在指针的前面添加。在指针的前面添加“*”运算符可运算符可以获得该指针所指向变量的值,因此将以获得该指针所指向变量的值,因此将“*”运算符称为取内运算符称为取内容运算符。容运算符。当将一个指针指向一个变量后,使用当将一个指针指向一个变量后,使用“*”可以实现对变量的可以实现对变量的间接访问。举例说明。间接访问。举例说明。上一页返回下一页任务任务2指向简单变量的指针指向简单变量的指针使用间接访问的方法不但可以将数据读出,还可以将数据写使用间接访问的方法不但可以将数据读出,还可以将数据写入。入。注意注意:在指针定义语句中在指针定义语句中“*”只是一个指针标志符号,主要只是一个指针标志符号,主要说明定义的变量为指针变量,不是取内容的运算符号,举例说明定义的变量为指针变量,不是取内容的运算符号,举例对比。对比。上一页返回下一页任务任务2指向简单变量的指针指向简单变量的指针正因为如此,可以在指针定义的同时对其进行定向,例如正因为如此,可以在指针定义的同时对其进行定向,例如:(4)除了给指针赋除了给指针赋1个确定的地址外还可以为指针赋个确定的地址外还可以为指针赋1个空值,个空值,这时该指针并没有指向个确定的地址,例如这时该指针并没有指向个确定的地址,例如:上一页返回下一页任务任务2指向简单变量的指针指向简单变量的指针(5)在在C语言中,虽然在定义语言中,虽然在定义1个变量后系统就为该变量在内个变量后系统就为该变量在内存中分配了一定大小的存储空间。但究竟此单元的地址是多存中分配了一定大小的存储空间。但究竟此单元的地址是多少,用户是很难知道的。其实,在实际的操作中,通常并不少,用户是很难知道的。其实,在实际的操作中,通常并不需要知道需要知道1个变量在内存中的地址编号是多少,在程序中只需个变量在内存中的地址编号是多少,在程序中只需用相应的表达式表示出用相应的表达式表示出1个变量的地址即可,例如使用语句个变量的地址即可,例如使用语句:上一页返回任务任务3指针与数组指针与数组7.3.1 一维数组的指针和指向一维数组的一维数组的指针和指向一维数组的指针变量指针变量1.数组的指针与数组元素的指针数组的指针与数组元素的指针数组元素的指针是指数组中某个具体元素的地址。数组的指针数组元素的指针是指数组中某个具体元素的地址。数组的指针则是数组的首地址,也叫起始地址,是数组中最开头那个元素则是数组的首地址,也叫起始地址,是数组中最开头那个元素的地址。的地址。C语言程序中,数组名本身就代表该数组的首地址。语言程序中,数组名本身就代表该数组的首地址。返回下一页任务任务3指针与数组指针与数组2.指向数组元素的指针变量的定义与赋值指向数组元素的指针变量的定义与赋值定义一个指向数组元素的指针变量的方法一般如下定义一个指向数组元素的指针变量的方法一般如下:注意注意:必须保证数组类型和指针变量所指向的变量类型保持一致。必须保证数组类型和指针变量所指向的变量类型保持一致。如果数组为如果数组为int型,则指针变量应指向型,则指针变量应指向int型型;如果数组为如果数组为float型,则指针变量应指向型,则指针变量应指向float型。型。对指向数组的指针变量赋值有两种方法对指向数组的指针变量赋值有两种方法:将数组的地址赋给指将数组的地址赋给指针变量和将数组元素的地址赋给指针变量。针变量和将数组元素的地址赋给指针变量。上一页返回下一页任务任务3指针与数组指针与数组3.指针法引用数组元素指针法引用数组元素假定假定:那么那么a代表数组代表数组a的首地址的首地址&a0,p的值也是的值也是&a0,*p和和*a则表示则表示a0。a+1的值是的值是&a1,p+1的值也是的值也是&a1,*(a+1)和和*(p+1)则表示则表示 a1 a+i的值是的值是&ai,p+i的值也是的值也是&ai,*(a+i)和和*(p+i)则表示则表示ai上一页返回下一页任务任务3指针与数组指针与数组上述文字可用上述文字可用图图7-3来形象地表示。来形象地表示。数组中元素数组中元素ai的实际地址为的实际地址为:a+i*d,d为一个数组元素为一个数组元素所占的字节数。例如所占的字节数。例如:如果如果a=2001;则元素则元素a5的实际地的实际地址为址为2001+5*2,即,即2011。因为一个。因为一个int型数据占型数据占2个个字节。字节。P是指针变量,可以进行递增和递减运算,例如是指针变量,可以进行递增和递减运算,例如:p+;p-;是合法的,但;是合法的,但a不能进行递增和递减运算,例如不能进行递增和递减运算,例如:a+:a-是非法的。因为是非法的。因为a是数组名,代表首地址,在程序是数组名,代表首地址,在程序中是固定不变的,不能进行递增和递减运算。中是固定不变的,不能进行递增和递减运算。上一页返回下一页任务任务3指针与数组指针与数组例例7-3用指针法输入输出数组元素的值。用指针法输入输出数组元素的值。上一页返回下一页任务任务3指针与数组指针与数组例例7-3的程序可以写成下面的指针法形式,其结果仍然不变。的程序可以写成下面的指针法形式,其结果仍然不变。程序如下程序如下:上一页返回下一页任务任务3指针与数组指针与数组例例7-3的程序还可以写成下面的指针法形式,其结果也是不的程序还可以写成下面的指针法形式,其结果也是不变的。变的。上一页返回下一页任务任务3指针与数组指针与数组7.3.2 内存的动态分配内存的动态分配在在C语言程序中,当定义任何一个类型数据对象时,程序都会语言程序中,当定义任何一个类型数据对象时,程序都会自动分配足够的内存空间来存储这些数据,特别在处理较多自动分配足够的内存空间来存储这些数据,特别在处理较多的数据时,通常使用数组。数组具有静态性,必须在程序编的数据时,通常使用数组。数组具有静态性,必须在程序编译前确定数组的大小,不能在程序运行时根据数据的实际多译前确定数组的大小,不能在程序运行时根据数据的实际多少来确定数组的大小,那样往往造成内存资源的浪费,降低少来确定数组的大小,那样往往造成内存资源的浪费,降低程序效率。程序效率。对数据使用动态存储的一般步骤如下对数据使用动态存储的一般步骤如下:确定需要多少内存空间一分配需要的存储空间一使指针指向确定需要多少内存空间一分配需要的存储空间一使指针指向获得的内存空间一用完后释放掉这部分内存空间。获得的内存空间一用完后释放掉这部分内存空间。上一页返回下一页任务任务3指针与数组指针与数组1.malloc()函数函数作用作用:从堆中申请分配一个大小为从堆中申请分配一个大小为size字节的内存块,函数使字节的内存块,函数使用完毕后,返回一个指针值,它指向新分配的内存块。如果用完毕后,返回一个指针值,它指向新分配的内存块。如果堆不够分配,则返回的指针值为堆不够分配,则返回的指针值为NULL。使用使用malloc()函数,必须将其头文件函数,必须将其头文件”stdlib.h”包含进来。包含进来。在计算内存空间大小时,通常使用在计算内存空间大小时,通常使用sizeof运算符来计算单个运算符来计算单个数据所需的字节数。数据所需的字节数。上一页返回下一页任务任务3指针与数组指针与数组上一页返回下一页任务任务3指针与数组指针与数组上一页返回下一页任务任务3指针与数组指针与数组2.calloc()函数函数作用作用:从堆中申请分配从堆中申请分配n个大小为个大小为size字节的连续内存块,函字节的连续内存块,函数使用完毕后,返回一个指针值,它指向新分配的首个内存数使用完毕后,返回一个指针值,它指向新分配的首个内存块。如果堆不够分配,则返回的指针值为块。如果堆不够分配,则返回的指针值为NULL。使用。使用calloc()函数,必须将其头文件函数,必须将其头文件”stdlib.h”包含进来。包含进来。上一页返回下一页任务任务3指针与数组指针与数组上一页返回下一页任务任务3指针与数组指针与数组上一页返回下一页任务任务3指针与数组指针与数组3.free()函数函数作用作用:释放指针变量释放指针变量P所指向的内存块。所指向的内存块。使用使用free()函数,必须将其头文件函数,必须将其头文件”stdlib.h”包含进来。包含进来。上一页返回下一页任务任务3指针与数组指针与数组上一页返回下一页任务任务3指针与数组指针与数组4.realloc()函数函数realloc()函数的原型如下函数的原型如下:作用作用:对已经申请成功的内存块进行缩小或扩大重新分配申请,对已经申请成功的内存块进行缩小或扩大重新分配申请,使之大小变为使之大小变为size字节,函数使用完毕后,返回一个指针值,字节,函数使用完毕后,返回一个指针值,它指向重新分配的内存块,如果重新分配申请不成功,则返它指向重新分配的内存块,如果重新分配申请不成功,则返回的指针值为回的指针值为NULL。使用使用rallot()函数,必须将其头文件函数,必须将其头文件”stdlib.h”包含进来。包含进来。上一页返回下一页任务任务3指针与数组指针与数组上一页返回下一页任务任务3指针与数组指针与数组上一页返回下一页任务任务3指针与数组指针与数组7.3.3 二维数组的指针和指向二维数组的二维数组的指针和指向二维数组的指针变量指针变量指针变量可以指向一维数组,也可以指向二维数组,下面介绍二指针变量可以指向一维数组,也可以指向二维数组,下面介绍二维数组的指针及指向二维数组的指针变量的一些基本概念和使用维数组的指针及指向二维数组的指针变量的一些基本概念和使用方法。方法。1.二维数组的指针与地址。二维数组的指针与地址。二维数组的指针就是二维数组的地址。二维数组的指针就是二维数组的地址。假定有一个二维数组如下假定有一个二维数组如下:上一页返回下一页任务任务3指针与数组指针与数组可以得出以下结论可以得出以下结论上一页返回下一页任务任务3指针与数组指针与数组2.指向二维数组的指针变量指向二维数组的指针变量C语言程序中,一个指针变量可以指向二维数组的某一行语言程序中,一个指针变量可以指向二维数组的某一行(指指向一维数组向一维数组),也可以指向二维数组中的某一个元素,也可以指向二维数组中的某一个元素(指向具指向具体数据体数据)。如果一个指针变量指向二维数组中的某一个元素,该二维数如果一个指针变量指向二维数组中的某一个元素,该二维数组可以通过元素相对地址的转换计算,用一维数组的方法来组可以通过元素相对地址的转换计算,用一维数组的方法来处理。处理。例例7-4用指向某一元素的指针变量输出二维数组中的元素值。用指向某一元素的指针变量输出二维数组中的元素值。上一页返回下一页任务任务3指针与数组指针与数组上一页返回下一页任务任务3指针与数组指针与数组例例7-5用指向二维数组某一行的指针变量输出二维数组中的用指向二维数组某一行的指针变量输出二维数组中的元素值。元素值。上一页返回下一页任务任务3指针与数组指针与数组例例7-6一个班有一个班有3个学生,各学个学生,各学4门功课,计算其平均分及第门功课,计算其平均分及第n个学生的成绩。个学生的成绩。上一页返回下一页任务任务3指针与数组指针与数组上一页返回下一页任务任务3指针与数组指针与数组上一页返回任务任务4指向字符串的指针变量指向字符串的指针变量7.4.1 字符串的表示形式字符串的表示形式在在C语言中,没有专门存放字符串的变量,一个字符串可以放语言中,没有专门存放字符串的变量,一个字符串可以放在一个字符数组中,数组名就表示该字符串中第一个字符存在一个字符数组中,数组名就表示该字符串中第一个字符存放的地址,也可以将字符串的首地址赋给一个字符型指针变放的地址,也可以将字符串的首地址赋给一个字符型指针变量,该指针变量便指向这个字符串。例如量,该指针变量便指向这个字符串。例如:返回下一页任务任务4指向字符串的指针变量指向字符串的指针变量【例例7-7】用字符数组来处理字符串。用字符数组来处理字符串。上一页返回下一页任务任务4指向字符串的指针变量指向字符串的指针变量【例例7-8】用字符串指针来实现处理字符串。用字符串指针来实现处理字符串。上一页返回下一页任务任务4指向字符串的指针变量指向字符串的指针变量说明说明:(1)首先定义指针变量首先定义指针变量str,并使其指向字符串,并使其指向字符串“I love China!”的首地址。的首地址。(2)在在printf(%sn,str)语句中,系统从语句中,系统从str所指向所指向的地址输出一个字符串,即输出的地址输出一个字符串,即输出:I love China!(3)在在for循环语句中,条件判断语句判断字符串是否结束,循环语句中,条件判断语句判断字符串是否结束,循环体中的语句是输出当前的循环体中的语句是输出当前的str所指向的字符,输出之后所指向的字符,输出之后str进行加进行加1,指向需要处理的下一个字符。,指向需要处理的下一个字符。上一页返回下一页任务任务4指向字符串的指针变量指向字符串的指针变量【例例7-9】输出字符串中输出字符串中n个字符之后的所有字符。个字符之后的所有字符。上一页返回下一页任务任务4指向字符串的指针变量指向字符串的指针变量【例例7-10】使用字符指针,把一个字符串的内容复制到另一使用字符指针,把一个字符串的内容复制到另一个字符串中。个字符串中。分析分析:将字符串将字符串a的内容复制到另一个字符串的内容复制到另一个字符串b中的方法是从中的方法是从a的第一个元素开始逐个复制到的第一个元素开始逐个复制到b中,一直到最后一个元素。特中,一直到最后一个元素。特别注意,一定要把字符串的结束标志复制到别注意,一定要把字符串的结束标志复制到b中。中。上一页返回下一页任务任务4指向字符串的指针变量指向字符串的指针变量上一页返回下一页任务任务4指向字符串的指针变量指向字符串的指针变量7.4.2 字符串指针变量与字符数组的区字符串指针变量与字符数组的区别别从上面的例子可以看出,使用字符数组和字符指针变量都可从上面的例子可以看出,使用字符数组和字符指针变量都可实现字符串的存储和运算。两者既有相同之处,又有区别。实现字符串的存储和运算。两者既有相同之处,又有区别。在使用时应注意以下几个问题在使用时应注意以下几个问题:(1)字符数组是由若干个字符元素组成的,它可用来存放整字符数组是由若干个字符元素组成的,它可用来存放整个字符串。字符串指针变量本身是一个变量,用于存放字符个字符串。字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该指针变量为首地址串的首地址。而字符串本身是存放在以该指针变量为首地址的一块连续的内存空间。的一块连续的内存空间。(2)赋值方式不同。字符串赋给字符数组只能在初始化的时赋值方式不同。字符串赋给字符数组只能在初始化的时候进行,即候进行,即上一页返回下一页任务任务4指向字符串的指针变量指向字符串的指针变量这是因为字符数组定义之后,只能对字符数组的各元素逐个这是因为字符数组定义之后,只能对字符数组的各元素逐个赋值。赋值。对于字符指针对于字符指针:上一页返回任务任务5指向函数的指针变量指向函数的指针变量7.5.1 函数的指针函数的指针前面介绍指针概念的最终目标都是要处理数据,所以称它们前面介绍指针概念的最终目标都是要处理数据,所以称它们为数据指针。在为数据指针。在C语言中,指针除了可以保存数据的存储地址语言中,指针除了可以保存数据的存储地址外,还可以保存函数存储的首地址外,还可以保存函数存储的首地址(即函数的执行入口地址即函数的执行入口地址)。指针变量持有函数的入口地址时,它就指向了该函数,称这指针变量持有函数的入口地址时,它就指向了该函数,称这种指针为指向函数的指针。函数的指针在程序中的说明形式种指针为指向函数的指针。函数的指针在程序中的说明形式如下。如下。上一页返回下一页任务任务5指向函数的指针变量指向函数的指针变量注意以下几点问题。注意以下几点问题。(1)圆括号不能省。圆括号不能省。(2)存储类型是函数指针本身的存储类型。存储类型是函数指针本身的存储类型。(3)数据类型是指针指向的函数具有的数据类型。数据类型是指针指向的函数具有的数据类型。(4)函数名具有该函数的存储首地址,即函数的执行入口地函数名具有该函数的存储首地址,即函数的执行入口地址。址。例如,在程序中定义了如下函数例如,在程序中定义了如下函数:上一页返回下一页任务任务5指向函数的指针变量指向函数的指针变量7.5.2 指向函数的指针的应用指向函数的指针的应用指向函数的指针的主要用途是在函数之间实现函数传递。函指向函数的指针的主要用途是在函数之间实现函数传递。函数传递实质上是函数地址的传递。在函数调用中,如果想在数传递实质上是函数地址的传递。在函数调用中,如果想在调用函数中把一个函数传递给被调用函数,只须把要传递的调用函数中把一个函数传递给被调用函数,只须把要传递的函数名作为实参即可。被调用函数的形参是接收函数入口地函数名作为实参即可。被调用函数的形参是接收函数入口地址的函数型指针。下面是指向函数的指针应用的实例。址的函数型指针。下面是指向函数的指针应用的实例。【例例7-11】编写程序,利用指向函数的指针分别指向加、减、编写程序,利用指向函数的指针分别指向加、减、乘、除乘、除4个函数,并实现加、减、乘、除的运算。个函数,并实现加、减、乘、除的运算。上一页返回下一页任务任务5指向函数的指针变量指向函数的指针变量上一页返回下一页任务任务5指向函数的指针变量指向函数的指针变量上一页返回下一页任务任务5指向函数的指针变量指向函数的指针变量上一页返回下一页任务任务5指向函数的指针变量指向函数的指针变量上一页返回任务任务6指针变量作为函数参数指针变量作为函数参数【例例7-12】返回下一页任务任务6指针变量作为函数参数指针变量作为函数参数把上例中把上例中swap函数改写成函数改写成:程序运行情况如程序运行情况如图图7-4所示。所示。上一页返回任务任务7指向结构体变量的指针指向结构体变量的指针7.7.1 指向结构体类型变量的指针指向结构体类型变量的指针1.指向结构体类型变量的指针变量指向结构体类型变量的指针变量在程序中,如果设置了一个指针变量来专门存放一种结构体在程序中,如果设置了一个指针变量来专门存放一种结构体类型变量的地址,则该变量就是指向这种结构体类型数据的类型变量的地址,则该变量就是指向这种结构体类型数据的指针变量,该变量的值就是存放某个结构体类型数据的内存指针变量,该变量的值就是存放某个结构体类型数据的内存单元的起始地址。单元的起始地址。指向结构体类型数据的指针变量一般说明形式如下指向结构体类型数据的指针变量一般说明形式如下:返回下一页任务任务7指向结构体变量的指针指向结构体变量的指针例如例如上一页返回下一页任务任务7指向结构体变量的指针指向结构体变量的指针2.利用指向结构体类型变量的指针变量引用利用指向结构体类型变量的指针变量引用利用指向结构体类型的指针变量引用结构体变量成员的一般利用指向结构体类型的指针变量引用结构体变量成员的一般形式如下形式如下:例如例如上一页返回下一页任务任务7指向结构体变量的指针指向结构体变量的指针“-”是指向结构体成员运算符,是指向结构体成员运算符,“.”是取结构体成员运是取结构体成员运算符,它们的结合方式从左到右,优先级别最高。算符,它们的结合方式从左到右,优先级别最高。在程序中只能将结构体类型变量的地址赋给一个指向结构在程序中只能将结构体类型变量的地址赋给一个指向结构体类型的指针变量,一个指向结构体类型的指针变量只能指体类型的指针变量,一个指向结构体类型的指针变量只能指向结构体类型变量,不能指向变量的成员。向结构体类型变量,不能指向变量的成员。上一页返回下一页任务任务7指向结构体变量的指针指向结构体变量的指针例例7-13指向结构体变量的指针的应用。指向结构体变量的指针的应用。上一页返回下一页任务任务7指向结构体变量的指针指向结构体变量的指针上一页返回下一页任务任务7指向结构体变量的指针指向结构体变量的指针7.7.2 指向结构体类型数组的指针指向结构体类型数组的指针在程序中,如果将一个结构体类型数组的地址赋给一个结构在程序中,如果将一个结构体类型数组的地址赋给一个结构体类型的变量,那么该变量就是一个指向结构体类型数组的体类型的变量,那么该变量就是一个指向结构体类型数组的指针变量。可以利用该指针变量来引用数组元素的各个成员。指针变量。可以利用该指针变量来引用数组元素的各个成员。例例7-14指向结构体数组的指针的应用。指向结构体数组的指针的应用。上一页返回下一页任务任务7指向结构体变量的指针指向结构体变量的指针上一页返回下一页任务任务7指向结构体变量的指针指向结构体变量的指针注意:注意:ps是指向结构体类型数据的指针变量,只能将数组的地址或是指向结构体类型数据的指针变量,只能将数组的地址或某个数组元素的地址赋给某个数组元素的地址赋给ps,不能将数组元素的成员或成员,不能将数组元素的成员或成员的地址赋给的地址赋给ps,否则,程序将会出错。,否则,程序将会出错。上一页返回图图7-1指针示意图指针示意图返回图图7-2 指针变量指针变量返回图图7-3返回图图7-4程序运行示意图程序运行示意图返回