资源预览内容
第1页 / 共40页
第2页 / 共40页
第3页 / 共40页
第4页 / 共40页
第5页 / 共40页
第6页 / 共40页
第7页 / 共40页
第8页 / 共40页
第9页 / 共40页
第10页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院第十章第十章 结构体与共用体结构体与共用体本章要点:本章要点:掌握结构体和共用体类型的说明掌握结构体和共用体类型的说明掌握结构体和共用体变量的定义及初掌握结构体和共用体变量的定义及初始化方法始化方法 掌握结构体与共用体变量成员的引用掌握结构体与共用体变量成员的引用 理解存储动态分配和释放理解存储动态分配和释放理解链表的基本概念和基本操作理解链表的基本概念和基本操作 理解枚举类型变量的定义理解枚举类型变量的定义了解了解 typedef typedef 的作用的作用 免醛衔人衬塌嗅袜钦魏粕杀铰抚化赣哈刹纫命掇榷冒类付详需宝采稳阂恩十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院10.1 概述概述 为了将不同类型的数据组合成一个有机的整为了将不同类型的数据组合成一个有机的整体,以便引用。体,以便引用。C 语言提供了一种数据结构,叫语言提供了一种数据结构,叫结结构体构体 (structure)。 结构体类型结构体类型声明的声明的一般形式一般形式: struct 结构体名结构体名 成员表列成员表列 ; 存储示意图存储示意图实例实例说明说明 其中其中: struct 表示是一个表示是一个 “ 结结构体类型构体类型 ” 结构体名结构体名 同标识符规则一样。同标识符规则一样。 成员表列成员表列 组成结构体的各成员项。组成结构体的各成员项。重点重点重点重点 struct student int num ; char name20 ; char sex ; int age ; float score ; char addr30 ; ;重点重点重点重点 numname sexage scoreaddr 10010Li Fun M 18 87.5 Beijing爵隔溺锡椅炒蜡洛耪菇卿隔锦妓厉硝蹲扇忿客垫呢蛾胸肪雷重虞丝刨辆曲十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院方法方法三、直接定义结构类型变量三、直接定义结构类型变量, struct 成员表列成员表列 变量名表列变量名表列 ; 例如例如 10.2 定义结构体类型变量的方法定义结构体类型变量的方法 方法一、方法一、 先声明结构体类型再定义变量名,先声明结构体类型再定义变量名,例如例如方法方法二、二、 在声明类型的同时定义变量在声明类型的同时定义变量,例如例如例例例例struct student student1 , student2 ; 表示表示: student1 , student2 为为 struct student 类型变量。类型变量。 定义一个结构体类型变量,不仅要求指定变量为定义一个结构体类型变量,不仅要求指定变量为结构体类型,而且要求指定为某一特定的结构体类型。结构体类型,而且要求指定为某一特定的结构体类型。 10010Li Fun M 18 87.5 Beijing 10011Su Li F 19 90 Shanghaistudent1student2 如如: struct student int num ; char name20 ; char sex ; int age ; float score ; char addr30 ; student1 , student2 ;重点重点重点重点 struct int num ; char name20 ; char sex ; int age ; float score ; char addr30 ; student 1 , student2 ;重点重点重点重点虐殆张瑰荤鹏吩轨弯脾峰损帝柿澡巧届绷芝夫转诧琴欢顿坤傣宽煤芯汪醒十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院定义结构体类型变量的定义结构体类型变量的几点说明几点说明: 1. 只能对结构体类型只能对结构体类型变量变量赋值赋值、存取存取、运算等。运算等。而不能对结构体而不能对结构体类型类型赋值赋值、存取存取、运算等。运算等。例如例如 2. 结构体变量中的成员如同普通变量一样,可以结构体变量中的成员如同普通变量一样,可以单独使用。单独使用。例如例如 3. 结构体的成员可以又是一个结构体变量。结构体的成员可以又是一个结构体变量。例如例如 4. 结构体类型中的成员名可以与普通变量名相同。结构体类型中的成员名可以与普通变量名相同。但二者是彼此独立的,互不干扰。但二者是彼此独立的,互不干扰。struct student =student1; (错误语句错误语句)重点重点重点重点student1.age=18;重点重点重点重点 如如: struct date int month ; int day ; int year ; ; struct student int num ; char name20 ; char sex ; int age ; struct date birthday ; char addr30 ; student1 , student2 ;birthdaymonth day year重点重点重点重点动填舱偿察戴讶吮赵姚咳掏兆当围疼尼擦霖冗跺蹋森杠妥娩施喷练游栗积十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院 10.3 结构体类型变量的引用结构体类型变量的引用 同普通变量一样,仍要求先定义后使用同普通变量一样,仍要求先定义后使用。规则如下规则如下: 一、一、 引用方式引用方式 结构体变量名结构体变量名 . 成员名成员名 其中其中: “ . ” 叫叫成员成员 ( 分量分量 ) 运算符。运算符。如如: student1 . num , student1 . addr 等等。等等。吮憋膜捧堕讹岗讨充憨拇兆塔婉搓鳖对轧忘伯窝莱坤困赛匿毕挛顾笛会吓十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院二、二、 引用时注意事项:引用时注意事项: (1) 不能将一个结构体变量作为一个整体进行输不能将一个结构体变量作为一个整体进行输入,输出等。而只能对入,输出等。而只能对结构体变量中的成员结构体变量中的成员分别进分别进 行输入行输入、输出输出、赋值等。赋值等。例如例如(2) 新标准新标准 C 中,可以将一个结构体变量直接赋中,可以将一个结构体变量直接赋给另一个具有给另一个具有相同结构的相同结构的结构体变量。结构体变量。例如例如(3)如成员本身又属另一个结构体类型。则只能如成员本身又属另一个结构体类型。则只能对最低级成员进行赋值对最低级成员进行赋值 ,存取和运算等。,存取和运算等。例例如如(4)对结构体变量中的成员可以象普通变量一样对结构体变量中的成员可以象普通变量一样进行各种运算。进行各种运算。例如例如 (5)允许使用成员和结构体变量的地址。允许使用成员和结构体变量的地址。例如例如 如如: printf ( “ %d, %s, %c , %d ,% f ,%s n”,student1) ; 而而: printf ( “ %s n ” , student1 . name ) ; student1 . num = 10010 ; (合法合法)例例例例student1 = student2 ;例例例例 如如: student1 . num student1 . name student1 . birthday . month 但不能用但不能用 student1 . birthday 来访问来访问 student1 中的成员中的成员birthday 。 因为它本身是一个结构体变量。因为它本身是一个结构体变量。例例例例如如: student2 . score = student1 . score ; student1 . age + + ; 等等。等等。 例例例例如如: scanf ( “ %d ”, &student1 . num ) ; printf ( “ %o” , &student1) ; (输出输出 student1 的首地址的首地址) 而而: scanf ( “%d , %s , %c , %d , % f , %s ” , &student1) ; 则不合法。则不合法。例例例例模栏划嗜芳煞峰殴痔炼妥刻拇瑟佩伏桓蜒疲匿刹驻化匪俭他魔摈生抬闹姨十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院 例例 10.1(p264) struct student long int num ; char name20 ; char sex ; char addr20 ; a = 89031 , “ Li Lin” , M , “123 Beijing Rood ” ; void main ( ) printf ( “ No.:%ldn name:%sn sex:%cn address:%sn”, a . num , a . name , a . sex , a . addr ) ; No: 89031 name: Li Lin sex: M address: 123 Beijing Rood10.4 结构体类型变量的初始化结构体类型变量的初始化澄喇纠土粘赞酸秧拘脸渠智到映汰构骆寨台呵噎衔肤茶困钓篓咯拧抓烈伸十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院10.5 结构体数组结构体数组 所谓结构体数组,即构成数组的每一个元素都是一个结 构体类型的数据。一、结构体数组的定义一、结构体数组的定义 1. struct student int num ; char name20 ; char sex ; int age ; float score ; char addr30 ; ; struct student stu3 ;2 . struct student int num ; . stu3 ;3 . struct int num ; . stu3 ;辙符梧澈耿教竿腹涵限袄厦金茹车挚谬庞拴板竹怂网缨湘薪妄馅绎撒材发十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院103 Beijing Road130 ShanghaiRoadstu0stu1stu2stu0stu1stu2 6项项 6项项 6项项numname sex age core addr10101 Li Lin M 1887.510102 Lu Pin M 19 9510103 Wu Li W 20 85.5100 Zhongsh Road 结构体数组的元素在内存结构体数组的元素在内存 中也是中也是连续存放连续存放的的并侄锗瓢掸水世惹衷粤肋茄拂蜀陋守诉垮洲但遁愤嫁忠傅中嘛扰潦保颁摔十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院 二、结构体数组的初始化二、结构体数组的初始化 struct student int num ; char name20 ; char sex ; int age ; float score ; char addr30 ; stu3 = 10101 , “ Li Lin ”, M , 18 , 87.5 , “ 103 Beijing Road ” , 10102 , “ Zhang Fun ”,M, 19 , 95 , “ 130 Shanghai Road ” , 10101 , “Wang Min ”,F , 20 , 78, “1010 Zhongshan Road ” ;卡漫挣两理烽明赣之使弹叼病家瑟此债旱符墙限侈深孕瓜豺采臃折狰泅丝十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院 例例 10.2 ( p266) struct person char name20 ; int count ; leader3 = “ Li ” , 0 , “ Zhang ” , 0 , “ Fun ” , 0 ; main ( ) int i , j ; char leader_name20 ; for ( i = 0 ; i = 10 ; i + + ) scanf ( “ %s ” , leader_name ) ; for ( j = 0 ; j 3 ; j + + ) if ( strcmp ( leader_name , leaderj . name) = = 0 ) leaderj . count + + ; printf ( “ %n ” ) ;体蚜漱峻帕孟参范措画狈啃海褐边舔卒征滓讯胆间峙短楞鸯扔惶骄耻碗拄十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院 for ( i = 0 ; i num 表示指向结构体成员运算符。表示指向结构体成员运算符。 3. 结构体变量中成员的引用有三种形式结构体变量中成员的引用有三种形式: (1) 结构体变量结构体变量 . 成员名成员名 ; (2) (*p) . 成员名成员名 ; (3) p 成员名成员名 ;产宰别妄谷涸升贫剩菱娇哩抬洞惹秤福阁隧绎糜捅伶解眶枝布孺娘欲艘匡十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院注意注意: pn 表示得到表示得到 p 指向的结构体变量中的指向的结构体变量中的成员成员 n 的的值值。 pn + + 表示得到表示得到 p 指向的结构体变量中指向的结构体变量中的成员的成员 n 的的值值。用完该值后使其加。用完该值后使其加 1 。 + +pn 表示使表示使 p 指向的结构体变量中的指向的结构体变量中的成员成员 n 的的值值加加 1。 ( 先加先加 ) 欠致赃癸掣挽厄周醋灾殉博阜菇趴豌亏琼轴扣载袄披宏医劝靳琅夫掂六肩十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院二、二、 指向结构体数组的指针指向结构体数组的指针 例例 10.4 ( p269) struct student int num ; char name20 ; char sex ; int age ; ; struct student stu3 = 10101 , “Li Lin”, M , 18 , 10102 , “Zhang Fun” , M , 19 , 10104 , “Wang Min” , F, 20 ;main ( ) struct student *p ; printf ( “ No Name sex age n ” ) ; for ( p = stu ; p num , p name , p sex , p age ) ; 藉节梧篷钝疙呛墅屯秀垄脉劳筐挣蝶吊砚夸凿惊铀踌抖扶复锑靠荷芳烩院十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院运行结果运行结果: No Name sex age 10101 Li Lin M 18 10102 Zhang Fun M 19 10104 Wang Min F 20stu0stu1stu2 4 4项项 4 4项项 4 4项项pp+1p+2鹿殊龙脾譬韭怠掩籍盛所雇男聋嫩肋粉钻堤隙酱售激饭秦桩滨怯俺辐内螟十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院 注意注意: 1. 指向结构体数组的指针指向结构体数组的指针 p 加加 1 的含义。的含义。 如如: ( + + p )num 和和 ( p + + )num 2. 不能直接把结构体数组元素中的某一成员的地址赋不能直接把结构体数组元素中的某一成员的地址赋给指向结构体数组的指针。给指向结构体数组的指针。 如如: p = &stu2 . num ; 因为因为地址类型地址类型不同。不同。 而而 :p = ( struct student * ) &stu2.num则可以。则可以。殊缎阿埋旧送慧低急绝珊珊彼轩获体体周裔关船县斧号便攘赫黄蝉轮赣切十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院 三、三、 用指向结构体的指针作函数参数用指向结构体的指针作函数参数 在函数调用时,结构体变量的传递有在函数调用时,结构体变量的传递有三三种形式种形式: 1. 用结构体变量的用结构体变量的成员成员作参数。作参数。 如如: stu1 . num 等。等。 2. 用指向结构体用指向结构体变量变量(或或数组数组)的的指针指针参数。参数。 3. 用整个结构体用整个结构体变量变量作参数。作参数。 (占用内存多,传递数占用内存多,传递数 据速度慢据速度慢)。旱宏憨豁济罪候螺偷桌榷湿预美阀攒贷牲个撼番姬啥垛气畦镊盲漂叶躯煞十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院 例例 10.5 (p271) # define FORMAT “ %d n%s n%f n%f n%f n ” struct student int num ; char name20 ; float score3 ; ; main ( ) void print ( struct student ) ; struct student stu ; stu . num = 12345 ; strcpy ( stu . name , “ Li Li ” ) ; 帖卧恃熔臻醒陇缠啡又姑掳略汽膏孔偶夜姐桃楚牢烷闸岩娟散宦觅超辙抗十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院 stu . score0 = 67.5 ; stu . score1 = 89 ; stu . score2 = 78.6 ; print ( stu ) ; void print ( struct student stu ) printf ( FORMAT , stu.num , stu.name , stu.score0 , stu.score1 , stu.score2 ) ; printf ( “n” ) ; 糠直峨俏寺露铸玲仍粹假沼把午荣巧券诚翔靴阵郴钮啃肚钠陪蛛忌掇帮要十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院 2. 用指向结构体变量的指针作实参用指向结构体变量的指针作实参 # define FORMAT “ %d n%s n%f n%f n%f n ” struct student int num ; char name20 ; float score3 ; stu = 12345, “Li Li ” , 67.5 , 89.78 , 6 ; main ( ) void print ( struct student * ) ; print ( &stu) ; 韦身峪域抬腿霓作垂谴巢吁方访浅鲍剥南镭煞泡送忠惠敛盆哼柏跺茸脱盒十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院 void print ( struct student * p ) printf ( FORMAT , pnum , pname , pscore0 , pscore1 , p score2 ) ; printf ( “n”) ; 说明说明: 1. 程序中各成员的赋值可用程序中各成员的赋值可用 scanf 函数。函数。 scanf (“ %d %s %f %f %f ” , &stu.num , stu.name , &stu.score0 , &stu.score1 , &stu.score2 ) ; 2. 如果结构体数组中包含有实型数组成员,不能用如果结构体数组中包含有实型数组成员,不能用 scanf 函数直接输入实型数组元素的值。可采用间接函数直接输入实型数组元素的值。可采用间接 输入的方式输入的方式东琶聂砚陪癌损河缴方居际炼意刽但灰释谗毯毋娜踊递昂准绦盾歇蘸爱螺十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院 struct student char name20 ; float score2 ; stu 2 ; for( i = 0 ; i 2 ; i + + ) for( j = 0 ; j 2 ; j + + ) scanf( “ %f ” , &stui. scorej ) ; 可改为:可改为:float t ; for( i = 0 ; i 2 ; i + + ) for( j = 0 ; j 2 ; j + + ) scanf( “ %f ” , &t ) ; stui. scorej = t ; 趋挟冯虑眺呸濒漂车它灶狸荆墅兹观跪邀谬碌险顷中洒烹缝挛丸模委葱凉十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院10.8 共用体共用体一、共用体的概念一、共用体的概念 几个不同的变量共占同一段内存的结构,叫几个不同的变量共占同一段内存的结构,叫“共共用体用体”类型结构。类型结构。 “共用体共用体”类型变量的定义:类型变量的定义: union 共用体名共用体名 成员表列成员表列 变量表列变量表列 ; 如如: union data int i ; char ch ; float f ; a , b , c ;起始地址起始地址实实 型型 变变 量量ch整型整型 变量变量陛姥迪朴衫仕们锗霸涨驶牙昨结芝芒坎辆撮鸣绳戴滓虫嚣瞥邱谚熄哦厄曝十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院 union data int i ; char ch ; float f ; ; union data a , b , c ;union int i ; char ch ; float f ; a , b , c ; 由上看出,由上看出, 共用体共用体和和结构体结构体的定义形式的定义形式相似相似。 但含义是不同的。结构体变量所占内存的长度是各成但含义是不同的。结构体变量所占内存的长度是各成员占的内存长度之员占的内存长度之和和。且每个成员分别占有其自己的。且每个成员分别占有其自己的内存单元。内存单元。 共用体变量所占的内存长度等于最长的成共用体变量所占的内存长度等于最长的成员的长度。员的长度。艳尘舟聘猖线恩绞掩婴媒烈结模购祥烈忱藐伪烤地巢求桐吭忠从乖只骋祖十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院二、 共用体变量的引用方式 规则: 先定义,后使用,且只能用成员运算符来引用共用体变量中的成员 如如: a . i a . ch a . f 等等。等等。 而而: printf ( “ %d ” , a ) ; ( 不合法不合法 )旅渭剐令朱段载锣屿瞎漠床沦昆保鹊莽裙买楼缅襄廷贷瞬诫仿涂鹤雄称销十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院三、共用体类型数据的特点三、共用体类型数据的特点 1. 并非所有成员都同时存在和起作用。即并非所有成员都同时存在和起作用。即:每一瞬时只有每一瞬时只有 一个成员起作用。一个成员起作用。 2. 共用体变量中起作用的成员是最后一次存放的成员。共用体变量中起作用的成员是最后一次存放的成员。 如如: union data int i ; char ch ; float f ; a ; a . i = 1 ; a . ch = a ; a . f = 1.5 ; 则只有则只有 a . f 有效,而此时有效,而此时 a . i 和和 a . ch 已无意义。已无意义。 ch整型整型 变量变量实实 型型 变变 量量起始地址起始地址浮管选芝彦时娥怜齿话曳霄涝戴邢拆悸晶蛀卞盗谈银灸错匪癸喳缚讣婴沽十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院但若存在相但若存在相同数据类型同数据类型的成员,则该成员就有意义。的成员,则该成员就有意义。 如如: main ( ) union data int i ; char ch ; float f ; float x ; a ; a . i = 1 ; a . ch = a ; a . f = 1.5 ; printf ( “%f , %f n” , a . f , a . x ) ; 输出为输出为: 1.5 , 1.5ch i f x符荚呵潭泅冰嗓姆例蛆渭朱陌跃周玛讨毗趴蹋铁族斧徘蹿凶手条紫暴门蝴十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院 3. 共用体变量的地址和各成员的地址都是同一地址。共用体变量的地址和各成员的地址都是同一地址。 4. 不能对不能对共用体变量共用体变量赋值和对其初始化。赋值和对其初始化。 union data int i ; char ch ; float f ; a = 1 , a , 1.5 ; ( 不合法不合法 ) 5. 共用体变量共用体变量不能不能作函数参数,但指向共用体变量的指作函数参数,但指向共用体变量的指 针则针则可以可以。 6. 结构体类型和共用体类型可以相互嵌套。结构体类型和共用体类型可以相互嵌套。 赂抚囊帅徽诡汲瞧尚妨畜疮臆祝悔趴耍键犹载枣华紧庆哲慢辐底掸蛤胚线十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院 union data struct st int a ; int b ; x ; int y ; int z ; max ;struct st union data int a ; char b ; x ; int y ; float z ; min ;薯翼履腑戎毖耪毕峰玄价韧燎役午雪绰铅舱藻圈艳信赁讳窗阜堡放晶淖掘十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院 补充例题补充例题1: 以下程序的输出为以下程序的输出为: # include “stdio.h” main ( ) union data struct st int x ; int y ; m ; int a ; int b ; e ; e . a = 1 ; e . b = 2 ; e . m . x = e . a * e . b ; e . m . y = e . a + e . b ; printf ( “ n%d , %d ”, e . m . x , e . m . y ) ; printf (“n%d , %d ”, e .a , e .b) ; xya起始地址起始地址b4 , 84 , 8蚌祷淤谋荣括洽悬背侈墩电益杨海补周成途岳春孔抹撰憾牙乾锰纹喇吴罩十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院 补充例题补充例题2: 以下程序的输出为以下程序的输出为: # include “stdio.h” main ( ) union data char a ; int x ; e ; e . x = 257 ; e . a = e ; printf ( “ %c , %d ”, e . a , e . x ) ; e , 3570000000100000001x = 25701100101 a = e 0110010100000001若若 x = 255 , 则输出为则输出为: e , 101述腊辟诗翁读港序羚脸核堕川滤附臣道处呈御揣薄计鹏个湍撤状屋丙档犹十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院10.10 用用 typedef 定义类型定义类型 C语言中使用类型的方法有三种语言中使用类型的方法有三种: 1. 直接使用直接使用C 提供的标准类型名提供的标准类型名(如如: int char float 等等)。 2. 用户自己定义的用户自己定义的结构体结构体,共用体共用体,指针指针等类型。等类型。 3. 用用 typedef 定义定义新类型名新类型名来代替已有的类型名。来代替已有的类型名。 typedef int INTEGER ; (指定指定 INTEGER 代表代表 int 类型类型) typedef float REAL ; int i , j ; 与与 INTEGER i , j ; 完全等价完全等价 float a , b ; 与与 REAL a , b ; 完全等价完全等价 往辣铸鳞雪扛消圣壮饯赊因颊裔凤福他择追私晃江译悍炭尘估供秤仪寸笼十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院定义一个新类型名的方法定义一个新类型名的方法: (1) 先按定义变量的方法写出定义体先按定义变量的方法写出定义体 如如: int i ; (2) 将变量名名换成新类型名将变量名名换成新类型名( 将将 i 换成换成 INTEGER ) (3) 在最前面加在最前面加 typedef 如如: typedef int INTEGER (4) 然后可以用新类型名去定义变量。然后可以用新类型名去定义变量。氟醉壮浮藉详灸了盟抉隧杯胶棒别蜘震澎惫治掷滤躯罪得弟兵号责配缚治十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院 如如: int n100 ; int NUM100 ; typedef int NUM100 ; NUM n ; 1. typedef char *STRING ; (定义定义STRING为字符指针类为字符指针类型型) STRING p , s10 ; ( p 为字符指针变量为字符指针变量, s 为指针数组为指针数组) 2. typedef int (*POINTER) ( ) (定义定义POINTER为指向返为指向返回整回整 POINTER p1 , p2 ; 型值的函数指针类型型值的函数指针类型 ) 3. typedef struct int month ; int day ; int year ; DATA ; DATA birthday ; DATA *p ; 1234勇祈表蹭膜委兼耙架烛王下皖纤炕酚甭盒股扶好铣千侠睦聪现裹拼扯壁级十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院 说明说明: 1. typedef 可以定义各种可以定义各种类型名类型名,但不能定义变量。使,但不能定义变量。使 用用 typedef 有时更方便。如有时更方便。如: int a10 , b10 , c10 , d10 ; typedef int ARR10 ; ARR a , b , c , d ; 2. typedef 与与 #define 的区别的区别 #define COUNT int typedef int COUNT ; 前者是在预编译时处理的,只是简单的字符替换。而前者是在预编译时处理的,只是简单的字符替换。而后者是在编译时处理的,并不是简单的字符替换。后者是在编译时处理的,并不是简单的字符替换。 3. 使用使用 typedef 有利于程序的通用和移植。有利于程序的通用和移植。 如如: typedef int INTEGER ; typedef long INTEGER ;掖贷眯或力饶促芜笔乍丰瓮春眨钧虞舱矫猪癣狈蹭烛饮寥坟烁舶螺业乒奈十章结构体与共用体ppt课件十章结构体与共用体ppt课件www.suse.edu.cnwww.suse.edu.cnC语语言言程程序序设设计计第第十十章章四川理工学院四川理工学院四川理工学院四川理工学院作业作业P296:11.3 11.4 11.5P296:11.3 11.4 11.5吴研逸蓝抿永劫泼猾歪炭薄飘硬透惠君唆堤毕挣侗缠本话扩腔问深浙投亩十章结构体与共用体ppt课件十章结构体与共用体ppt课件
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号