结构型、共用型和枚举类型

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上一页 下一页 返回
10.4 指向结构类型数据的指针
void ave(struct stu *ps) { int c=0,i; float ave,s=0; for(i=0;i<5;i++,ps++) { s+=ps->score; if(ps->score<60) c+=1; } printf("s=%f\n",s); ave=s/5; printf("average=%f\ncount=%d\n",ave,c); }
上一页 下一页 返回
10.5 链表处理---结构指针的应用
3.释放内存空间函数free 调用形式: free(void*ptr); 功能:释放ptr所指向的一块内存空间,ptr 是一个任意类型的
指针变量,它指向被释放区域的首地址。被释放区应是由malloc 或calloc函数所分配的区域:[例7.9]分配一块区域,输入一个学生 数据。
上一页 下一页 返回
10.5 链表处理---结构指针的应用
1.分配内存空间函数malloc 调用形式: (类型说明符*) malloc (size) 功能:在内存的动态存储区中分配一块长度为“size” 字节的
连续区域。函数的返回值为该区域的首地址。 2.分配内存空间函数 calloc
calloc 也用于分配内存空间。 调用形式: (类型说明符*)calloc(n,size) 功能:在内存动态存储区中分配n块长度为“size”字节的连续 区域。函数的返回值为该区域的首地址。
上一页 返回
10.5 链表处理---结构指针的应用
TYPE * insert(TYPE * head,TYPE *pi) { TYPE *pf,*pb; pb=head; if(head==NULL) /*空表插入*/ { head=pi; pi->next=NULL; } else { while((pi->num>pb->num)&&(pb->next!=NULL)) { pf=pb; pb=pb->next; /*找插入位置*/ }
上一页 下一页 返回
10.4 指向结构类型数据的指针
1.指针变量指向数组元素 如果一个结构型数组元素的地址已赋予相同结构型指针变量
(即指针变量指向结构型数组元素),可以使用下列两种方式来 引用数组该元素的成员,其作用完全相同。
方式1 (*指针变量).成员名 方式2 指针变量一>成员名 注意:这里的指针变量必须是指向某个数组元素的。例如, 它指向的数组元素为“数组名[k]”,则上述两种引用方式均代表 “数组名[k].成员名”。
方式1 (*指针变量).成员名 方式2 指针变量一>成员名
下一页 返回
10.4 指向结构类型数据的指针
10.4.2指向结构型数组的指针
定义指向结构型数组的指针变量和指向结构型变量的指针变 量的定义方法完全相同。
当结构指针变量指向一个结构数组时, 结构指针变量的值是 整个结构数组的首地址。 结构指针变量也可指向结构数组的一个 元素,这时结构指针变量的值是该结构数组元素的首地址。设ps 为指向结构数组的指针变量,则ps也指向该结构数组的0号元素, ps+1指向1号元素,ps+i则指向i号元素。这与普通数组的情况是一 致的。
构造类型是由相同或不同的数据类型组合而成的。数组是构 造类型,但它只能存放数据类型相同的一批数据。为了能将不同 数据类型的数据存放在一起,C语言规定用户可以自己定义一种数 据类型来存放类型不同的数据。这种数据类型就称为“结构型”。 定义一个结构的一般形式为: struct 结构名 { 数据类型1 成员1名; 数据类型2 成员2名; …… 数据类型n 成员n名; }; /* 注意:分号“;”不能省略 */
3. 直接说明结构变量。例如: struct { int num; char name[20]; char sex; float score; }boy1,boy2;
上一页 返回
10.2 结构型变量的引用与初始化
10.2.1结构型变量的引用与赋值
引用结构变量成员的一般形式是: 结构变量名.成员名 例如:boy1.num 即第一个人的学号 boy2.sex 即第二个人的 性别 ,如果成员本身又是一个结构则必须逐级找到最低级的成员 才能使用。例如:boy1.birthday.month 即第一个人出生的月份成 员,可以在程序中单独使用,与普通变量完全相同。 结构变量的赋值就是给各成员赋值。 可用输入语句或赋值语 句来完成。
上一页 下一页 返回
10.1 结构类型与结构变量的定义
2. 在定义结构类型的同时说明结构变量。例如: struct stu { int num; char name[20]; char sex; float score; }boy1,boy2;
上一页 下一页 返回
10.1 结构类型与结构变量的定义
返回
10.4 指向结构类型数据的指针
10.4.1指向结构型变量的指针
定义指向结构型变量的指针变量和定义结构型变量的方法基 本相同,惟一的区别是在指针变量名的前面加一个指针标记“*”。 可以将结构型和指针变量分开来定义,也可以同时定义结构型和 对应的指针变量,使用后一种方法还可以省略结构型的名称。
当一个结构型变量的地址已赋予相同结构型的指针变量(即 指针变量指向变量),就可以使用下列两种方式来引用该结构型 变量的成员,其作用完全相同。
上一页 返回
10.5 链表处理---结构指针的应用
10.5.1链表的创建
链表是一种常见的重要数据结构。它是动态地进行存储分配 的一种结构。在数组一章中,曾介绍过数组的长度是预先定义好 的, 在整个程序中固定不变。C语言中不允许动态数组类型。例 如: int n;
scanf("%d",&n); int a[n];
上一页 下一页 返回
10.5 链表处理---结构指针的应用
10.5.2 对链表的插入操作
例10.8 写一个函数,在链表中指定位置插入一个结点。在一 个链表的指定位置插入结点, 要求链表本身必须是已按某种规律 排好序的。例如,在学生数据链表中, 要求按学号顺序插入一个 结点。设被插结点的指针为pi,后一节点的指针为pb,前一节点的 指针为pf。 可在三种不同情况下插入。 1. 原表是空表,只需使head指向被插结点即可。 2. 被插结点值最小,应插入第一结点之前。这种情况下使head指向被 插结点,被插结点的指针域指向原来的第一结点则可。即: pi->next=pb; head=pi;
下一页 返回
10.5 链表处理---结构指针的应用
用变量表示长度,想对数组的大小作动态说明, 这是错误的。 但是在实际的编程中,往往会发生这种情况, 即所需的内存空间 取决于实际输入的数据,而无法预先确定。对于这种问题, 用数 组的办法很难解决。比如,有的班级有100人而有的班级只有30人, 如果要用一个数组先后存放不同班级的学生数据,则必须把数组 定义的够大,以能存放任何班级的学生数据。显然这将会浪费内 存。链表没有这种缺点,它根据需要开辟存储空间。
上一页 下一页 返回
10.5 链表处理---结构指针的应用
3. 在其它位置插入。这种情况下,使插入位置的前一结点的指针域指 向被插结点,使被插结点的指针域指向插入位置的后一结点。即 为: pi->next=pb; pf->next=pi;
4. 在表末插入,。这种情况下使原表末结点指针域指向被插结点,被 插结点指针域置为NULL。即: pb->next=pi; pi->next=NULL; 以下为链表插入函数的实现。其中TYPE为定义好的结构型, head为指向头结点的指针。
ping",'M',62.5}, {103,"He fang",'F',92.5},{104,"Cheng ling",'F',87}, {105,"Wang ming",'M',58}};
上一页 下一页 返回
10.4 指向结构类型数据的指针
main() { struct stu *ps; void ave(struct stu *ps); ps=boy; ave(ps); }
上一页 下一页 返回
10.4 指向结构类型数据的指针
10.4.3指向结构数据的指针作函数参数
例10.7 计算一组学生的平均成绩和不及格人数。 用结构指针变量作函数参数编程。 struct stu { int num; char *name; char sex; float score;}boy[5]={{101,"Li ping",'M',45},{102,"Zhang
上一页 下一页 返回
10.5 链表处理---结构指针的应用
本函数有两个形参均为指针变量,head指向链表,pi 指向被 插结点。函数中首先判断链表是否为空,为空则使head指向被插 结点。表若不空,则用while语句循环查找插入位置。找到之后再 判断是否在第一结点之前插入,若是则使head 指向被插结点被插 结点指针域指向原第一结点,否则在其它位置插入,若插入的结 点大于表中所有结点,则在表末插入。本函数返回一个指针,是 链表的头指针。当插入的位置在第一个结点之前时,插入的新结 点成为链表的第一个结点,因此head的值也有了改变,故需要把 这个指针返回主调函数。
下一页 返回
10.1 结构类型与结构变量的定义
10.1.2结构型变量的定义
1.先定义结构,再说明结构变量。 如:struct stu { int num; char name[20]; char sex; float score; }; struct stu boy1,boy2; 说明了两个变量boy1和boy2为stu结构类型。
上一页 下一页 返回
10.3 结构数组
如果在程序中定义某个结构型,不但可以用它来定义变量并 赋初值,也可以用它定义数组并初始化。
当使用指针变量指向结构型数组或其元素时,也应遵守指针 变量的数据类型和结构型数组或元素的数据类型相同的原则。
结构数组的每一个元素都是具有相同结构类型的下标结构变 量。 在实际应用中,经常用结构数组来表示具有相同数据结构的 一个群体。如一个班的学生档案,一个车间职工的工资表等。 结 构数组的定义方法和结构变量相似,只需说明它为数组类型即可
上一页 下一页 返回
10.2 结构型变量的引用与初始化
main() { boy2=boy1; printf("Number=%d\nName=%s\n",boy2.num,); printf("Sex=%c\nScore=%f\n",boy2.sex,boy2.score); }
第10章 结构型、共用型和枚举类型
10.1 结构类型与结构变量的定义 10.2 结构型变量的引用与初始化 10.3 结构数组 10.4 指向结构类型数据的指针 10.5 链表处理---结构指针的应用 10.6 共用型和枚举型 10.7 用户自定义类型
10.1 结构类型与结构变量的定义
10.1.1结构类型定义
上一页 下一页 返回
10.5 链表处理---结构指针的应用
if(pi->num<=pb->num) { if(head==pb)head=pi; /*在第一结点之前插入*/ else pf->next=pi; /*在其它位置插入*/ pi->next=pb; } else{ pb->next=pi; pi->next=NULL; /*在表末插入*/ } } return head; }
上一页 下一页 返回
10.4 指向结构类型数数组的首地址已经赋予相同结构型的指针变量
(即指针变量指向结构型数组),可以使用下列两种方式来引用 下标为i的数组元素成员,其作用完全相同。
方式1(*(指针变量十i)).成员名 方式2(指针变量+i)->成员名
下一页 返回
10.2 结构型变量的引用与初始化
10.2.2结构型变量的初始化
和其它类型变量一样,对结构体变量可以在定义时指定初始值。 例10.2 结构变量初始化。 struct stu /*定义结构*/ { int num; char *name; char sex; float score; } boy2,boy1={102,"Zhang ping",'M',78.5};
相关文档
最新文档