Ch11 结构体与共用体.ppt

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 11.1 结构体 11.1.4 函数间结构体数据的传递 【例】编制一个复数乘法函数,采用传递指针 的方法达到传送数据的目的。 struct complex { float re,im;}; void multiplier(struct complex *px, struct complex *py, struct complex *pz) { pz-re=px-re*py-re-px-im*py-im; pz-im=px-re*py-im+px-im*py-re; } 形参定义为指针型参数。函数调用时,实参传递的 是结构体指针(地址),因此形参px、py可读取主调函 数中变量的内容,乘积结果也可通过形参pz指针存到主 调函数中的目标变量。 这样实参与形参之间的数据传递由多值(每个成员的值) 变成了单值(结构体变量的首地址)。 哨镊亚隆状赘雍侯强锰腔轿命磋通莽匈盛资莫世怖霖膀辆浩邹玖唬硫汇忽Ch11 结构体与共用体Ch11 结构体与共用体 * * 11.1 结构体 11.1.4 函数间结构体数据的传递 main( ) { struct complex x, y, z; x.re=3.2; x.im=1.5; y.re=2.7; y.im=4.6; multiplier(x,y,z); printf((%f+%fi)*(%f+%fi)=%f+%fi\n,x.re,x.im, y.re, y.im, z.re, z.im); } 网潞确勋心细哈滨指缴雪搏咕旺鞭宣伯茄垫撼庐芹垣醇仔鹰匡侈衣凹聂朝Ch11 结构体与共用体Ch11 结构体与共用体 * * 链表是一种动态数据结构,可根据需要动态地分配存储单元。在数组中,插入或删除一个元素都比较繁琐,而用链表则相对容易。但是数组元素的引用比较简单,对于链表中结点数据的存取操作则相对复杂。 11.1 结构体 11.1.5 结构体的应用——链表 ① 链表中每个元素称为一个结点。 ② 构成链表的结点必须是结构体类型数据。 1. 链表的基本结构 head 1000 1032 3284 1296 1382 2008 动态单向链表示意图 C 3284 H 1296 A 1382 I 2008 N NULL 1000 1032 ③ 相邻结点的地址不一定是连续的,依靠指针将 它们连接起来。 struct node {char c; struct node *next; }; 祁法酪味篆轴檬腑肥窒舞欠铲书厅酥彩博栅犹梧卜移肚掉肠载快郭疤隐模Ch11 结构体与共用体Ch11 结构体与共用体 * * C语言提供了相关的存储管理库函数。这里仅介绍其中三个,它们的原型说明在“stdlib.h”头文件和“malloc.h”头文件中,使用这三个函数时,应选择其中一个头文件包含到源程序中。 ⑴ 动态分配存储区函数malloc( ) 函数原型:void *malloc(unsigned size); 调用格式:malloc(size) 功能:在内存分配一个size字节的存储区。调用 结果为新分配的存储区的首地址,是一个void 类型指针。若分配失败,则返回NULL(即0)。 11.1 结构体 11.1.5 结构体的应用——链表 2. 动态分配和释放存储单元 在ANSI C标准中,关键字void有两种用法。 第一种用法,可将无返回值的函数定义为void类型 第二种用法,用void * 定义指针,这是一个指向 非具体数据类型的指针,称为无类型指针。 僚去揩腐菩台塘具戏娠榆释备隐比顷叮衔潍堡所们揖初橇僳距淀童碍旱喘Ch11 结构体与共用体Ch11 结构体与共用体 * * 【例】调用malloc函数分配所需存储单元。 #include stdlib.h main( ) { struct st { int n; struct st *next; }*p; p=(struct st *)malloc(sizeof(struct st)); p-n=5; p-next=NULL; pr

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档