欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    《C/C程序设计》第06章(复合数据类型).ppt

    • 资源ID:72525459       资源大小:228KB        全文页数:63页
    • 资源格式: PPT        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《C/C程序设计》第06章(复合数据类型).ppt

    6.1 指针类型指针类型概念:概念:概念:概念:旅馆房间、房间编号、房间名称、派房牌(上写房间号)。旅馆房间、房间编号、房间名称、派房牌(上写房间号)。旅馆房间、房间编号、房间名称、派房牌(上写房间号)。旅馆房间、房间编号、房间名称、派房牌(上写房间号)。1 1)地址)地址)地址)地址 给内存单元(一般是字节)的编号给内存单元(一般是字节)的编号给内存单元(一般是字节)的编号给内存单元(一般是字节)的编号 。计算机根据它找到对应的字节进行。计算机根据它找到对应的字节进行。计算机根据它找到对应的字节进行。计算机根据它找到对应的字节进行访问(存取)。访问(存取)。访问(存取)。访问(存取)。高级语言中定义一个变量,编译时根据其类型分配相应数目的字节(如高级语言中定义一个变量,编译时根据其类型分配相应数目的字节(如高级语言中定义一个变量,编译时根据其类型分配相应数目的字节(如高级语言中定义一个变量,编译时根据其类型分配相应数目的字节(如int int 型分型分型分型分2 2个字节,个字节,个字节,个字节,float float 分分分分4 4个字节),将变量名与对应内存字节映射。个字节),将变量名与对应内存字节映射。个字节),将变量名与对应内存字节映射。个字节),将变量名与对应内存字节映射。变量名变量名变量名变量名 地址地址地址地址 内存单元内存单元内存单元内存单元 2 2)指针)指针)指针)指针 给变量、数组、结构体、函数等分配的内存单元或块区的首地址。给变量、数组、结构体、函数等分配的内存单元或块区的首地址。给变量、数组、结构体、函数等分配的内存单元或块区的首地址。给变量、数组、结构体、函数等分配的内存单元或块区的首地址。假如有:假如有:假如有:假如有:long m=56000 long m=56000 则则则则 :&m&m 就是就是就是就是 m m的指针或者说是的指针或者说是的指针或者说是的指针或者说是 m m所占内存所占内存所占内存所占内存单元的首地址。此例中,单元的首地址。此例中,单元的首地址。此例中,单元的首地址。此例中,5600056000就放在从这个地址开始的连续四个字节中。就放在从这个地址开始的连续四个字节中。就放在从这个地址开始的连续四个字节中。就放在从这个地址开始的连续四个字节中。3 3)指针变量)指针变量)指针变量)指针变量 定义一种特殊变量,这种变量专门存放指针,用它也可找到(指向)变定义一种特殊变量,这种变量专门存放指针,用它也可找到(指向)变定义一种特殊变量,这种变量专门存放指针,用它也可找到(指向)变定义一种特殊变量,这种变量专门存放指针,用它也可找到(指向)变量、数组、结构体、函数,这样的变量量、数组、结构体、函数,这样的变量量、数组、结构体、函数,这样的变量量、数组、结构体、函数,这样的变量 称作指针变量。称作指针变量。称作指针变量。称作指针变量。按变量是直接寻址;按指针变量是间接寻址。按变量是直接寻址;按指针变量是间接寻址。按变量是直接寻址;按指针变量是间接寻址。按变量是直接寻址;按指针变量是间接寻址。由于变量、数组、结构体、函数等所分配的内存单元或块区的大小及结由于变量、数组、结构体、函数等所分配的内存单元或块区的大小及结由于变量、数组、结构体、函数等所分配的内存单元或块区的大小及结由于变量、数组、结构体、函数等所分配的内存单元或块区的大小及结构不同,指针变量因而也要定义成相应的类型,不能混用。构不同,指针变量因而也要定义成相应的类型,不能混用。构不同,指针变量因而也要定义成相应的类型,不能混用。构不同,指针变量因而也要定义成相应的类型,不能混用。例例例例 交换两数。交换两数。交换两数。交换两数。void swap();void swap();main()main()int a,b;int a,b;scanf(%d%d”,&a,&b);scanf(%d%d”,&a,&b);swap(&a,&b);swap(&a,&b);printf(“%d,%d”,a,b);printf(“%d,%d”,a,b);void swap(int *p1,int*p2)void swap(int *p1,int*p2)int t;int t;t=*p1,*p1=*p2,*p2=t;t=*p1,*p1=*p2,*p2=t;2000H2001H2EA0H2EA1Ha=10 b=8内存 地址变量108指针变量p2=&b=2EA0H:3100H3101H3802H3803H2000H2EA0Hp1=&a=2000H变量的指针变量变量的指针变量 1)1)指针变量的定义指针变量的定义指针变量的定义指针变量的定义 *;例例例例 int *p1,*p2;int *p1,*p2;2)2)指针变量的赋值指针变量的赋值指针变量的赋值指针变量的赋值 指针变量指针变量指针变量指针变量=&=&变量变量变量变量 例例例例 先定义后赋值:先定义后赋值:先定义后赋值:先定义后赋值:p1=&a;p2=&b;p1=&a;p2=&b;定义时赋初值:定义时赋初值:定义时赋初值:定义时赋初值:int a,*prt=&a;int a,*prt=&a;其中其中其中其中:&:&是取指针(地址)运算符。是取指针(地址)运算符。是取指针(地址)运算符。是取指针(地址)运算符。赋初值问题:一个指针变量被定义后,在赋予某一变量的指针以前,其赋初值问题:一个指针变量被定义后,在赋予某一变量的指针以前,其赋初值问题:一个指针变量被定义后,在赋予某一变量的指针以前,其赋初值问题:一个指针变量被定义后,在赋予某一变量的指针以前,其值是随机的,这个随机数可能恰好是系统区的某单元的地址。在系统不知和值是随机的,这个随机数可能恰好是系统区的某单元的地址。在系统不知和值是随机的,这个随机数可能恰好是系统区的某单元的地址。在系统不知和值是随机的,这个随机数可能恰好是系统区的某单元的地址。在系统不知和不受系统管理的情形下改写其中内容是危险的。变量的地址是由系统分配和不受系统管理的情形下改写其中内容是危险的。变量的地址是由系统分配和不受系统管理的情形下改写其中内容是危险的。变量的地址是由系统分配和不受系统管理的情形下改写其中内容是危险的。变量的地址是由系统分配和管理的,因而是安全的。管理的,因而是安全的。管理的,因而是安全的。管理的,因而是安全的。3 3)指针变量的使用)指针变量的使用)指针变量的使用)指针变量的使用 p1=&a;p2=&b;scanf(“%d%d”,p1,p2);p1=&a;p2=&b;scanf(“%d%d”,p1,p2);t=*p1;*p1=*p2;*p2=t;t=*p1;*p1=*p2;*p2=t;其中:其中:其中:其中:*号是取值运算符。号是取值运算符。号是取值运算符。号是取值运算符。*与与与与&是一对互逆运算。是一对互逆运算。是一对互逆运算。是一对互逆运算。例如:例如:例如:例如:*(&a)a&a)a ;&(*p)p&(*p)p *指针变量指针变量指针变量指针变量 变量变量变量变量 例如例如例如例如:p=&a;*p:p=&a;*p 就是就是就是就是a;a;定义时的定义时的定义时的定义时的*与使用时的与使用时的与使用时的与使用时的*含义不同,前者表示定义含义不同,前者表示定义含义不同,前者表示定义含义不同,前者表示定义的是指针变量;后者是对变量的取值运算。的是指针变量;后者是对变量的取值运算。的是指针变量;后者是对变量的取值运算。的是指针变量;后者是对变量的取值运算。定义了一个某类型的指针变量后,它可以指向任意定义了一个某类型的指针变量后,它可以指向任意定义了一个某类型的指针变量后,它可以指向任意定义了一个某类型的指针变量后,它可以指向任意一个同类型变量。一个同类型变量。一个同类型变量。一个同类型变量。4 4)指针变量作函数参数)指针变量作函数参数)指针变量作函数参数)指针变量作函数参数 主调函数主调函数主调函数主调函数 被调函数被调函数被调函数被调函数 实参实参实参实参 形参形参形参形参&a p&a p p p p p 6.2 数组类型数组类型数组的特点:数组的特点:(1)(1)数数组组中中的的每每一一个个元元素素均均属属于于同同一一类类型型,我我们们称称这这种种类类型为数组的基类型;型为数组的基类型;(2)(2)每每个个数数组组中中的的元元素素个个数数一一经经确确定定后后就就保保持持不不变变,我我们们称它为数组的长度;称它为数组的长度;(3)(3)数数组组中中的的每每个个元元素素均均为为变变量量,我我们们用用数数组组下下标标来来直直接接访问数组的元素;访问数组的元素;(4)(4)数数组组中中的的元元素素还还允允许许是是数数组组类类型型,从从而而产产生生二二维维数数组组、多维数组等结构;多维数组等结构;(5)(5)在在数数组组定定义义中中,常常量量表表达达式式的的值值虽虽然然指指出出了了数数组组元元素素的个数,但的个数,但CC编译器不做越界检查;编译器不做越界检查;(6)数数组组名名表表示示数数组组所所用用空空间间的的首首地地址址,也也就就是是数数组组第第0个个元元素的地址。是一个常量地址。素的地址。是一个常量地址。一、一维数组的声明一、一维数组的声明 格式:类型格式:类型 数组名数组名常量表达式常量表达式;二、一维数组的引用与初始化二、一维数组的引用与初始化引用形式:引用形式:引用形式:引用形式:数组名数组名数组名数组名 下标下标下标下标 初始化形式:存储类别初始化形式:存储类别初始化形式:存储类别初始化形式:存储类别 数据类型数据类型数据类型数据类型 数组名数组名数组名数组名 数组长度数组长度数组长度数组长度=初始化值初始化值初始化值初始化值;例:例:例:例:static int a5=10,20,30,40,50;static int a5=10,20,30,40,50;一般要求:只有定义为静态或外部存储的才能初始化。一般要求:只有定义为静态或外部存储的才能初始化。一般要求:只有定义为静态或外部存储的才能初始化。一般要求:只有定义为静态或外部存储的才能初始化。三、数组作为函数的参数(传递地址)三、数组作为函数的参数(传递地址)三、数组作为函数的参数(传递地址)三、数组作为函数的参数(传递地址)例:对一字符串反序输出。(例:对一字符串反序输出。(例:对一字符串反序输出。(例:对一字符串反序输出。(exinver.c)exinver.c)四、二维数组的声明四、二维数组的声明四、二维数组的声明四、二维数组的声明形式:形式:形式:形式:类型类型类型类型 数组名数组名数组名数组名 常量表达式常量表达式常量表达式常量表达式 常量表达式常量表达式常量表达式常量表达式;如:如:如:如:int scores503;int scores503;说明:说明:说明:说明:编译程序为二维数组分配存储空间时是按行进行的,即先编译程序为二维数组分配存储空间时是按行进行的,即先编译程序为二维数组分配存储空间时是按行进行的,即先编译程序为二维数组分配存储空间时是按行进行的,即先按顺序存放第一行的所有数据,然后接着按顺序存放第二行的所按顺序存放第一行的所有数据,然后接着按顺序存放第二行的所按顺序存放第一行的所有数据,然后接着按顺序存放第二行的所按顺序存放第一行的所有数据,然后接着按顺序存放第二行的所有数据,如此类推。二维数组有数据,如此类推。二维数组有数据,如此类推。二维数组有数据,如此类推。二维数组scoresscoresscoresscores的存储空间分配如下图所示:的存储空间分配如下图所示:的存储空间分配如下图所示:的存储空间分配如下图所示:.25000 scores00 25002 scores01 25004 scores02 25006 scores10 25008 scores11 25010 scores12 .25298 scores492 .五、二维数组元素的引用与初始化五、二维数组元素的引用与初始化引用形式:引用形式:数组名数组名行下标行下标列下标列下标/下标为整数类型的表达式下标为整数类型的表达式如:如:scores201=100;初始化形式:存储类别初始化形式:存储类别 数据类型数据类型 数组名数组名常量常量1常量常量2=初值初值;如:如:static int s34=50,60,80,20,40,90,70,100,10;例例 矩阵行列互换。矩阵行列互换。Exmatrix.c 1 2 3 4 1 5 9 5 6 7 8 2 6 10 9 10 11 12 3 7 11 4 8 12 六、指针与数组六、指针与数组在语言中,指针与数组之间的关系是十分密切的。指针类型变量可在语言中,指针与数组之间的关系是十分密切的。指针类型变量可以当作数组使用,数组类型变量也可以当作指针使用,即在语以当作数组使用,数组类型变量也可以当作指针使用,即在语言中,我们可以象访问指针一样访问数组,也可以象访问数组一样访言中,我们可以象访问指针一样访问数组,也可以象访问数组一样访言中,我们可以象访问指针一样访问数组,也可以象访问数组一样访言中,我们可以象访问指针一样访问数组,也可以象访问数组一样访问指针。其区别为:数组名不能自加、自减,但指针变量可以。问指针。其区别为:数组名不能自加、自减,但指针变量可以。问指针。其区别为:数组名不能自加、自减,但指针变量可以。问指针。其区别为:数组名不能自加、自减,但指针变量可以。例如:例如:例如:例如:int a10,*p;int a10,*p;p=a;p=a;p+p+或或或或p-p-都是成立的,而都是成立的,而都是成立的,而都是成立的,而a+a+或或或或a-a-是不成立的。是不成立的。是不成立的。是不成立的。而而而而*(a+I)a+I)、aIaI、*(p+I)*(p+I)、pIpI是等价的。是等价的。是等价的。是等价的。七、指针数组与数组指针七、指针数组与数组指针七、指针数组与数组指针七、指针数组与数组指针指针数组:指针数组:指针数组:指针数组:指基类型为指针类型的数组,即该数组的每个元素均为一指基类型为指针类型的数组,即该数组的每个元素均为一指基类型为指针类型的数组,即该数组的每个元素均为一指基类型为指针类型的数组,即该数组的每个元素均为一个指针。如果我们需要保留许多指针的值,也就是要保存多个变量的个指针。如果我们需要保留许多指针的值,也就是要保存多个变量的个指针。如果我们需要保留许多指针的值,也就是要保存多个变量的个指针。如果我们需要保留许多指针的值,也就是要保存多个变量的地址,就可以使用指针数组。地址,就可以使用指针数组。地址,就可以使用指针数组。地址,就可以使用指针数组。定义形式:数据类型定义形式:数据类型定义形式:数据类型定义形式:数据类型 *数组名数组名数组名数组名 数组长度数组长度数组长度数组长度;如:如:如:如:int *p10;int *p10;/在此声明了一个包含在此声明了一个包含在此声明了一个包含在此声明了一个包含1010个整数类型指针变量的数组个整数类型指针变量的数组个整数类型指针变量的数组个整数类型指针变量的数组p p。这里这里这里这里*并不是数组名字的组成部分,它只是告诉编译程序并不是数组名字的组成部分,它只是告诉编译程序并不是数组名字的组成部分,它只是告诉编译程序并不是数组名字的组成部分,它只是告诉编译程序p p是一个整是一个整是一个整是一个整数类型的指针数组,而不是简单的整数类型数组数类型的指针数组,而不是简单的整数类型数组数类型的指针数组,而不是简单的整数类型数组数类型的指针数组,而不是简单的整数类型数组。例:建立如下距阵并输出例:建立如下距阵并输出例:建立如下距阵并输出例:建立如下距阵并输出 1 0 0 0 1 1 0 0 0 1 0 1 0 1 0 0 1 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 0 1程序为:程序为:程序为:程序为:main()main()main()main()int a55=0,*p5,i,j;int a55=0,*p5,i,j;int a55=0,*p5,i,j;int a55=0,*p5,i,j;for(i=0;i5;i+)for(i=0;i5;i+)for(i=0;i5;i+)for(i=0;i5;i+)pi=&ai0;/pi=&ai0;/pi=&ai0;/pi=&ai0;/指针数组指针数组指针数组指针数组p p p p 指向指向指向指向a a a a数组的每行起始地址数组的每行起始地址数组的每行起始地址数组的每行起始地址for(i=0;i5;i+)for(i=0;i5;i+)for(i=0;i5;i+)for(i=0;i5;i+)*(pi+i)=1;/*(pi+i)=1;/*(pi+i)=1;/*(pi+i)=1;/对主对角线赋值对主对角线赋值对主对角线赋值对主对角线赋值 *(pi+4-i)=1;/*(pi+4-i)=1;/*(pi+4-i)=1;/*(pi+4-i)=1;/对副对角线赋值对副对角线赋值对副对角线赋值对副对角线赋值 for(i=0;i5;i+)/for(i=0;i5;i+)/for(i=0;i5;i+)/for(i=0;i5;i+)/用二层循环打印二维数组用二层循环打印二维数组用二层循环打印二维数组用二层循环打印二维数组 for(j=0;j5;j+)for(j=0;j5;j+)for(j=0;j5;j+)for(j=0;j5;j+)printf(“%2d”,*(pi+j);/printf(“%2d”,*(pi+j);/printf(“%2d”,*(pi+j);/printf(“%2d”,*(pi+j);/每个指针数组指向每列的表示每个指针数组指向每列的表示每个指针数组指向每列的表示每个指针数组指向每列的表示 printf(n);printf(n);printf(n);printf(n);数组指针:数组指针:数组指针:数组指针:定义形式:数据类型定义形式:数据类型定义形式:数据类型定义形式:数据类型 (*指针变量名)指针变量名)指针变量名)指针变量名)长度长度长度长度;如:如:如:如:int (*array_ptr)10;/int (*array_ptr)10;/申明了一个指针类型的变申明了一个指针类型的变申明了一个指针类型的变申明了一个指针类型的变量量量量array_ptr,array_ptr,它指向一个长度为它指向一个长度为它指向一个长度为它指向一个长度为10 10 的整数数组。的整数数组。的整数数组。的整数数组。数组指针可以看成是二维的,此时与二维数组在存数组指针可以看成是二维的,此时与二维数组在存数组指针可以看成是二维的,此时与二维数组在存数组指针可以看成是二维的,此时与二维数组在存储上相同,但变量名是指针变量,可以进行指针运储上相同,但变量名是指针变量,可以进行指针运储上相同,但变量名是指针变量,可以进行指针运储上相同,但变量名是指针变量,可以进行指针运算。算。算。算。引用方式:引用方式:引用方式:引用方式:若有:若有:若有:若有:int(*p)4int(*p)4,a34;a34;p=a;p=a;引用:引用:引用:引用:*(*(p+I)+j)aIj *(*(p+I)+j)aIj例:例:例:例:exarrp.c exarrp.c 6.36.3字符串字符串字符串字符串一、字符串常量与变量:字符串变量是一个基类型一、字符串常量与变量:字符串变量是一个基类型一、字符串常量与变量:字符串变量是一个基类型一、字符串常量与变量:字符串变量是一个基类型为字符类型的数组变量,同样遵循为字符类型的数组变量,同样遵循为字符类型的数组变量,同样遵循为字符类型的数组变量,同样遵循“先声明、后使先声明、后使先声明、后使先声明、后使用用用用”的原则,我们在声明字符串变量时,可用字符的原则,我们在声明字符串变量时,可用字符的原则,我们在声明字符串变量时,可用字符的原则,我们在声明字符串变量时,可用字符串常量作初始化。如:串常量作初始化。如:串常量作初始化。如:串常量作初始化。如:char name10=“limeixue”;char name10=“limeixue”;初始化方式有三种。初始化方式有三种。初始化方式有三种。初始化方式有三种。也可以定义指针变量指向字符串。如:也可以定义指针变量指向字符串。如:也可以定义指针变量指向字符串。如:也可以定义指针变量指向字符串。如:char char*name=“limeixue”;*name=“limeixue”;二、字符串数组二、字符串数组二、字符串数组二、字符串数组定义:定义:定义:定义:char *name12;char *name12;例:按姓名查询。例:按姓名查询。例:按姓名查询。例:按姓名查询。Exsearch.cExsearch.c三、字符串库函数三、字符串库函数三、字符串库函数三、字符串库函数(string.h)(string.h)1.1.char*strcat(char*str1,const char*str2);char*strcat(char*str1,const char*str2);char*strcat(char*str1,const char*str2);char*strcat(char*str1,const char*str2);作作作作用用用用:将将将将字字字字符符符符串串串串str2str2连连连连接接接接到到到到字字字字符符符符串串串串str1str1后后后后,形形形形成成成成一一一一个个个个新新新新字字字字符符符符串串串串,原原原原先先先先str1str1的的的的结结结结束束束束标标标标记记记记00被被被被取取取取消消消消。函函函函数数数数返返返返回回回回值值值值为为为为str1str1。注注注注意意意意为为为为字字字字符符符符串串串串变变变变量量量量str1str1分分分分配配配配的的的的存存存存储空间一定要足够大,能够容纳两个字符串连接后的新字符串。储空间一定要足够大,能够容纳两个字符串连接后的新字符串。储空间一定要足够大,能够容纳两个字符串连接后的新字符串。储空间一定要足够大,能够容纳两个字符串连接后的新字符串。如:如:如:如:char s1=“good”,s2=“evening!”;char s1=“good”,s2=“evening!”;strcat(s1,s2);strcat(s1,s2);2.2.char*strchr(const char*str,int ch);char*strchr(const char*str,int ch);char*strchr(const char*str,int ch);char*strchr(const char*str,int ch);作作作作用用用用:寻寻寻寻找找找找字字字字符符符符串串串串strstr中中中中第第第第一一一一次次次次出出出出现现现现字字字字符符符符chch的的的的位位位位置置置置。如如如如果果果果找找找找到到到到chch,则则则则返返返返回回回回指向该位置的指针;否则返回空指针。指向该位置的指针;否则返回空指针。指向该位置的指针;否则返回空指针。指向该位置的指针;否则返回空指针。3.3.int strcmp(const char*str1,const char*str2);int strcmp(const char*str1,const char*str2);int strcmp(const char*str1,const char*str2);int strcmp(const char*str1,const char*str2);作作作作用用用用:比比比比较较较较字字字字符符符符串串串串str1str1和和和和str2str2的的的的内内内内容容容容是是是是否否否否相相相相同同同同。如如如如果果果果str1str1小小小小于于于于str2str2则则则则返返返返回回回回负负负负数;如果数;如果数;如果数;如果str1str1等于等于等于等于str2str2则返回零;如果则返回零;如果则返回零;如果则返回零;如果str1str1大于大于大于大于str2str2则返回正数。则返回正数。则返回正数。则返回正数。4.4.char*strcpy(char*str1,const char*str2);char*strcpy(char*str1,const char*str2);char*strcpy(char*str1,const char*str2);char*strcpy(char*str1,const char*str2);作作作作用用用用:将将将将str2str2指指指指向向向向的的的的字字字字符符符符串串串串复复复复制制制制到到到到str1str1指指指指向向向向的的的的位位位位置置置置中中中中并并并并返返返返回回回回str1str1。注注注注意意意意为为为为str1str1分配的存储空间必须能放得下分配的存储空间必须能放得下分配的存储空间必须能放得下分配的存储空间必须能放得下str2str2指向的字符串。指向的字符串。指向的字符串。指向的字符串。注:注:注:注:char *str;strcpy(str,char *str;strcpy(str,“Be careful”);“Be careful”);引起的问题。引起的问题。引起的问题。引起的问题。5.5.unsigned int strlen(const char*str);unsigned int strlen(const char*str);unsigned int strlen(const char*str);unsigned int strlen(const char*str);作作作作用用用用:返返返返回回回回字字字字符符符符串串串串strstrstrstr中中中中的的的的字字字字符符符符个个个个数数数数,包包包包括括括括其其其其中中中中的的的的空空空空格格格格与与与与转转转转义字符义字符义字符义字符,但不包括字符串结束标记但不包括字符串结束标记但不包括字符串结束标记但不包括字符串结束标记0000。6.char*strstr(const*str1,const char*str2);6.char*strstr(const*str1,const char*str2);6.char*strstr(const*str1,const char*str2);6.char*strstr(const*str1,const char*str2);作作作作用用用用:寻寻寻寻找找找找字字字字符符符符串串串串str2str2在在在在字字字字符符符符串串串串str1str1中中中中第第第第一一一一次次次次出出出出现现现现的的的的位位位位置置置置,不不不不包包包包括括括括str2str2的的的的结结结结束束束束标标标标记记记记00。如如如如果果果果找找找找到到到到str2str2,则则则则返返返返回回回回指指指指向向向向该位置的指针;否则返回空指针。该位置的指针;否则返回空指针。该位置的指针;否则返回空指针。该位置的指针;否则返回空指针。四、字符串应用四、字符串应用四、字符串应用四、字符串应用例例例例1 1:按姓名排序。(按姓名排序。(按姓名排序。(按姓名排序。(exnsort.c)exnsort.c)冒冒冒冒泡泡泡泡法法法法排排排排序序序序(从从从从小小小小到到到到大大大大):n n个个个个数数数数参参参参与与与与排排排排序序序序,每每每每趟趟趟趟找找找找出出出出最最最最大大大大数数数数存存存存与与与与最最最最后后后后,共共共共n-1n-1趟趟趟趟。每每每每一一一一趟趟趟趟中中中中对对对对相相相相邻邻邻邻的的的的两两两两个个个个元元元元素素素素进进进进行行行行比比比比较,不符合次序的立即交换。较,不符合次序的立即交换。较,不符合次序的立即交换。较,不符合次序的立即交换。例例例例2 2:打印出全班每个学生姓名的长度。:打印出全班每个学生姓名的长度。:打印出全班每个学生姓名的长度。:打印出全班每个学生姓名的长度。Exlen.cExlen.c6.4 结构体类型结构体类型一、概述一、概述记录型数据与结构体 一组相关的不同数据类型的数据项,可作一个整体来处理。一组相关的不同数据类型的数据项,可作一个整体来处理。PASCAL中称中称“记录型记录型”数据,数据,C中称结构体类型数据。中称结构体类型数据。与数组有明显不同,数组要求其所有成员的类型、长短一与数组有明显不同,数组要求其所有成员的类型、长短一样结构体类型和结构体变量样结构体类型和结构体变量。struct student int num;char name20;char sex;struct date birthday;float score;stu1,stu2;struct date int month;int day;int year;什么情形时适用结构体或数组什么情形时适用结构体或数组?二、定义结构体的类型和变量二、定义结构体的类型和变量定义结构体类型 一般形式一般形式:例 参见上页struct 结构体类型名 分量1;分量2;分量3;:分量:分量又称域或成员。当分量是结构体时,形成定义时的嵌套。定义结构体类型的变量定义结构体类型的变量定义结构体变量三种形式三种形式:1.定义结构体的同时定义 例如前页例。2.先定义结构体,后定义结构体变量 例:struct stu .;.struct stu st1,st2;3.直接定义 例:struct .变量名表;在struct 后不出现结构体类型名三、三、结构体变量的引用结构体变量的引用结构体类型不是存储数据的实体,即系统并不结构体类型不是存储数据的实体,即系统并不是给它分配内存,它仅是一种数据类型,与是给它分配内存,它仅是一种数据类型,与int,char 类似,用来定义一种数据类型的变量;类似,用来定义一种数据类型的变量;结构体类型变量才是存储数据的实体,结构体结构体类型变量才是存储数据的实体,结构体变量的分量具体分配存储单元,等价于一组变变量的分量具体分配存储单元,等价于一组变量。因此我们引用的是结构体变量。量。因此我们引用的是结构体变量。引用结构体变量只能通过引用结构体变量的分引用结构体变量只能通过引用结构体变量的分量(成员)实现(在量(成员)实现(在I/O时,赋值时等)。用时,赋值时等)。用“.”或或“-”引用。引用。例如:例如:sum=st1.score+st2.score;成员运算符(多级)成员运算符(多级)例如:例如:age=1999-st1.birthday.year;_QC允许将一结构体变量的所有分量赋予同类允许将一结构体变量的所有分量赋予同类的另一变量。的另一变量。例如:例如:st2=st1;例 ex2stu1.c四、四、结构体数组结构体数组以某结构体类型也可以定义数组例 按姓名查询。ex2stuarr.cstruct student int num;char name30;char sex;float score;stu30;每个下标变量stui 都有结构体类型student 的各个分量;下标变量的引用同变量。五、五、结构体类型的指针结构体类型的指针指向结构体类型变量的指针 指向结构体类变量的指针就是该变量所占用的内存区段的首址。例 struct student int num;char name3;char sex;float score;st1,st2,st3;struct student *p=&st1;printf(“%d,%s”,st1.num,st2.name);printf(“%d,%s”,(*p).num,(*p).name);printf(“%d,%s”,p-num,p-name);numnamesexscore:2A00Hst1p 指向结构体类型数组的指针 指向结构体类数组的指针就是该数组所占用的内存区段的首址。例 struct student int num;char name3;char sex;float score;st30=;struct student *p=st;for(p=st;pnum,p-name,p-sex,p-score);:2A00Hst0st1st2st3:2A0AH 2A14H2AE0Hp例:若干个学生的信息包括:学号、姓名、三门例:若干个学生的信息包括:学号、姓名、三门例:若干个学生的信息包括:学号、姓名、三门例:若干个学生的信息包括:学号、姓名、三门可可可可课的成绩课的成绩课的成绩课的成绩(c c语言、电子技术、控制理论语言、电子技术、控制理论语言、电子技术、控制理论语言、电子技术、控制理论)、总分,、总分,、总分,、总分,要求打印一份名次表。要求打印一份名次表。要求打印一份名次表。要求打印一份名次表。分析:总分是需要计算的。分析:总分是需要计算的。分析:总分是需要计算的。分析:总分是需要计算的。按总分从小到大排序(按总分从小到大排序(按总分从小到大排序(按总分从小到大排序(bubble)bubble)。按行输出。按行输出。按行输出。按行输出。Ex2table.cEx2table.c指向结构体类型数据的指针一、指向结构体类型变量的指针例 打印通讯录。(excommu.cexcommu.c)二、指向结构体数组的指针例用结构指针建立一个图书检索系统。按书名检索。(exsearch.c)三、结构指针的使用例链表。链表的建立、遍历、查找、插入、删除操作。链表链表 什么是链表?线性表线性表线性表线性表:有限个元素的有序集合。可用数组或链表表示。有限个元素的有序集合。可用数组或链表表示。有限个元素的有序集合。可用数组或链表表示。有限个元素的有序集合。可用数组或链表表示。数数数数组和链表两组和链表两组和链表两组和链表两 者都逻辑连续,但后者可以在空间不连续。者都逻辑连续,但后者可以在空间不连续。者都逻辑连续,但后者可以在空间不连续。者都逻辑连续,但后者可以在空间不连续。动态数据结构动态数据结构动态数据结构动态数据结构:其大小可变;动态分配存储空间。链表是最简单的其大小可变;动态分配存储空间。链表是最简单的其大小可变;动态分配存储空间。链表是最简单的其大小可变;动态分配存储空间。链表是最简单的一种,属于线性动态数据结构,树是非线性动态数据结构一种,属于线性动态数据结构,树是非线性动态数据结构一种,属于线性动态数据结构,树是非线性动态数据结构一种,属于线性动态数据结构,树是非线性动态数据结构。链表链表链表链表:链表中的一个元素称为一个结点或节点。每个结点由链表中的一个元素称为一个结点或节点。每个结点由链表中的一个元素称为一个结点或节点。每个结点由链表中的一个元素称为一个结点或节点。每个结点由两部分组成:数据部分、指向上下结点的指针。靠这样的指针两部分组成:数据部分、指向上下结点的指针。靠这样的指针两部分组成:数据部分、指向上下结点的指针。靠这样的指针两部分组成:数据部分、指向上下结点的指针。靠这样的指针把各个结点串联起来构成链表。分单向、双向链表,后者可以把各个结点串联起来构成链表。分单向、双向链表,后者可以把各个结点串联起来构成链表。分单向、双向链表,后者可以把各个结点串联起来构成链表。分单向、双向链表,后者可以两方向连接。两方向连接。两方向连接。两方向连接。00单向链表双向链表0数据部分数据部分数据部分数据部分2/12/2023链表链表为什么使用链表?1)不需要连续存储空间,可利用内存碎片;2)插入删除元素不需移动其它元素,处理速度快;3)动态分配存储空间,不必以最大可能长度预定存储空间,且可以随意扩充表的容量。动态分配存储空间动态分配存储空间(使用函数使用函数)void*malloc(unsigned size)void*malloc(unsigned size)函数函数函数函数(memory allocation)(memory allocation):在内存的:在内存的:在内存的:在内存的动态存储区中分配一个长度为动态存储区中分配一个长度为动态存储区中分配一个长度为动

    注意事项

    本文(《C/C程序设计》第06章(复合数据类型).ppt)为本站会员(wuy****n92)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开