




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、白 雪 飞中国科学技术大学电子科学与技术系Dept. of Elec. Sci. & Tech., USTCFall, 2007l构造体l构造体数组l指向构造体的指针l定义类型别名l动态存储分配函数l构造体的运用链表l构造体概述l构造体类型的声明l构造体变量的定义l构造体变量的初始化l构造体变量的援用l构造体l将不同类型的数据组合成一个整体l用来表示简单类型无法描画的复杂对象l可以用构造体来定义用户本人的数据构造l举例l描画学生信息numnamesexagescoreaddr12039Bill GatesM4076.5New Yorkl普通方式lstruct 构造体名 l 成员表列l
2、;l“成员表列方式l 类型 成员名;l 类型 成员名;l . .l声明了一种类型,而不是定义变量l构造体名可以没有,但是这样就无法再次运用该构造体类型了l成员表列中是成员(Member)的定义l成员的定义方式与变量定义一样l成员类型可以是另一构造体类型,但不可直接或间接递归嵌套l成员表列不可为空,至少要有一个成员l留意不表示复合语句,其后有分号l同一构造体的成员不能重名l不同构造体的成员可以重名l构造体成员和其他变量可以重名l构造体类型称号是struct 构造体名,留意struct关键字不能省略l构造体类型也要“先声明,后运用l即使两个构造体声明中的成员类型、称号、顺序都完全一致,它们也是不同
3、的类型l假设构造体类型声明在函数内部,那么该函数之外无法援用此构造体类型l普通把构造体类型声明放到文件最前面l也可以把构造体类型声明放在头文件里struct student unsigned num; /* 学号学号 */ char name20; /* 姓名姓名 */ char sex; /* 性别性别 */ unsigned age; /* 年龄年龄 */ float score; /* 分数分数 */ char addr50; /* 地址地址 */;l先声明构造体类型再定义变量struct student unsigned num; char name20; char sex; unsi
4、gned age; float score; char addr50;struct student stu1, stu2;l在声明构造体类型的同时定义变量struct student unsigned num; char name20; char sex; unsigned age; float score; char addr50; stu1, stu2;l直接定义无名构造类型变量struct unsigned num; char name20; char sex; unsigned age; float score; char addr50; stu1, stu2;struct date
5、int year, month, day; ;struct student unsigned num; char name20; char sex; struct date birthday; float score; stu1, stu2;l按照成员的顺序和类型对成员初始化struct date date1 = 1984, 10, 20;struct student stu = 1001, /*unsigned num*/ Tom, /*char name20*/ M, /*char sex*/ 1983, 9, 20,/*struct date birthday*/ 93.5 /*floa
6、t score*/;l普通方式l构造体变量名.成员名l成员运算符 .l具有最高的优先级,自左向右结合l阐明l构造体成员和同类型的变量用法一样l假设成员类型又是一个构造体,那么可以运用假设干个成员运算符,访问最低一级的成员struct student stu;. .scanf(%f, &stu.score);stu.num = 12345;stu.birthday.month = 11;stu.score = sqrt(stu.score) * 10;strcpy(, Mike);printf(No.%d:, stu.num);l构造体类型变量之间可以直接相互赋值l本质上
7、是两个构造体变量相应的存储空间中的一切数据直接拷贝l包括复杂类型在内的一切构造体成员都被直接赋值,如字符串、构造体类型等l函数的实参和形参可以是构造体类型,并且遵照实参到形参的单向值传送规那么l为了提高程序的效率,函数的参数多运用构造体类型指针struct student stu1, stu2=1002, Kate, F, 1981, 11, 4, 89.0;void print(struct student s) printf(%d,%4s,%c,%d.%02d.%02d,%4.1fn, s.num, , s.sex, s.birthday.year, s.birthday.mo
8、nth, s.birthday.day, s.score);int main () stu1 = stu2; /* 直接赋值直接赋值 */ print(stu1); /* 1002,Kate,F,1981.11.04,89.0 */l构造体数组的用法与根本类型数组类似l定义、初始化、援用等l构造体数组可用于表示二维表格l举例struct student s10;for (i=0; i10; i+) scanf(%d,%s,%c,%d,%f, &si.num, , &si.sex, &si.age, &si.score);struct student
9、 stu = 1001,Tom,M,1980,1,2,85.5, 1002,Kate,F,1981,11,4,89.0, 1003,Mike,M,1980,3,5,95.5;for (i=0; i)援用指针所指向的构造体的成员l指向运算符 -l构造体指针-成员名l具有最高的优先级,自左向右结合l假设struct student stu, *p=&stu;l那么stu.num、(*p).num、p-num等效l指向构造体数组的指针l与指向其他根本类型数组的指针用法类似l留意相关运算符的结合方向和优先级l举例struct student stu10, p=stu;+p-num; /* 同同
10、+(p-num); */p+-num; /* 同同(p+)-num; */(+p)-num;(p+)-num;void input(struct student *p) scanf(%d %s %c %d.%d.%d %f, &p-num, p-name, &p-sex, &p-birthday.year, &p-birthday.month, &p-birthday.day, &p-score);int main () struct student stu20; int i; for (i=0; i20; i+) input(stu+i);l普
11、通方式ltypedef l举例ltypedef float REAL; ltypedef struct l int month;l int day;l int year;l DATE;l动态分配存储l根据需求开辟或释放存储单元l相关函数lmalloc函数lcalloc函数lfree函数l阐明l应包含malloc.h或stdlib.hl函数原型ltypedef unsigned size_t;lvoid *malloc(size_t size);l参数lsize:分配存储空间的字节数l前往值l假设胜利,前往指向分配区域起始地址的指针l假设失败,前往NULLl函数原型lvoid *calloc(s
12、ize_t n,l size_t size);l参数ln :分配内存的工程数lsize:分配内存的每个工程的字节数l前往值l假设胜利,前往指向分配区域起始地址的指针l假设失败,前往NULLl函数原型lvoid free(void *ptr);l参数lptr:要释放的内存区地址l阐明l释放ptr指向的内存区l释放后的内存区可以分配给其他变量运用a1 a2 a3 .an headstruct nodedata nextaistruct node int data; struct node *next; ;struct node *head;l链表的建立l从链尾到链头:新结点插入到链头l从链头到链尾
13、:新结点插入到链尾l链表的遍历l删除结点l根据一定的条件,删除一个或多个结点l插入结点l根据一定的条件,把新结点插入到指定位置headai-1. head = p; head = p; p = malloc(sizeof (struct node); p = malloc(sizeof (struct node); p-data = ai; p-data = ai; for(i=0; in; i+) for(i=0; inext = head; p-next = head;ai-1. p-next = q; p-next = q; q = malloc(sizeof (struct node)
14、; q = malloc(sizeof (struct node); q-data = ai; q-data = ai; for(i=0; in; i+) for(i=0; inext = NULL; q-next = NULL;p p = q; p = q;.ai-1aiai+1. p = p-next; p = p-next;p while(p) while(p) printf(%d, p-data); printf(%d, p-data);.ai-1aiai+1. p-next = q-next; p-next = q-next; free(q); free(q); q = p-next; q = p-next;pq if(p-next if(p-next满足删除条件满足删除条件) ).aiai+1. p-next = q; p-next = q; q = malloc(sizeof (struct node); q = malloc(sizeo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 西藏疫情乙类管理办法
- 荥阳市城市管理办法
- 专案管理档案管理办法
- 西瓜害虫管理办法视频
- 三类器械仓储管理办法
- 贸易融资贷款管理办法
- 落实编制人员管理办法
- 融资考核兑现管理办法
- 订单与发货管理办法
- 业主日常经营管理办法
- 装饰装修施工应急预案措施
- 租车公司经营管理制度
- 浙江省温州市名校2025届英语八下期末教学质量检测试题含答案
- 藻类分子机制解析与调控网络构建-洞察阐释
- 柴油运输配送管理制度
- 深圳片区控制性详细规划设计导则2025
- 2025至2030中国森林防火行业现状供需分析及重点企业投资评估规划分析报告
- JG/T 336-2011混凝土结构修复用聚合物水泥砂浆
- 卫生院岗位体系与职责说明
- T/CAPA 009-2023面部埋线提升技术操作规范
- 关于工资结清协议书
评论
0/150
提交评论