兼容(compatible)结构 赋值操作只能用于兼容的结构类型 一起声明的结构变量是兼容的,比如前面的 part1和part2 ■用同一结构类型声明的结构变量也是兼容的 除了赋值以外,C不支持对结构整体的其它操 作符 ■特别地,=和!=不可用于两个结构变量之间
兼容(compatible)结构 赋值操作只能用于兼容的结构类型 一起声明的结构变量是兼容的,比如前面的 part1和part2 用同一结构类型声明的结构变量也是兼容的 除了赋值以外,C不支持对结构整体的其它操 作符 特别地,==和!=不可用于两个结构变量之间 11
结构类型(Structure Type) ■有时需要声明大量具有相同成员的结构 因此需要一种特定结构类型,而不是某个具体 的结构变量 ■定义结构类型有两种方式: 必声明结构标签(structure tag) 用typedef定义一个类型
结构类型(Structure Type) 有时需要声明大量具有相同成员的结构 因此需要一种特定结构类型,而不是某个具体 的结构变量 定义结构类型有两种方式: 声明结构标签(structure tag) 用typedef定义一个类型 12
声明结构标签 一个结构标签是区别某类结构的一个特定名字 下面声明了一个称为part的结构标签: struct part int number; char name [NAME LEN+1]; int on hand; }; 注意不要忽略右花括号后的分号 ■ 自此part可以作为一个类型用来声明结构变量: struct part part1,part2; 13
声明结构标签 一个结构标签是区别某类结构的一个特定名字 下面声明了一个称为part的结构标签: 注意不要忽略右花括号后的分号 自此part可以作为一个类型用来声明结构变量: struct part { int number; char name[NAME_LEN+1]; int on_hand; }; struct part part1, part2; 13
使用结构标签 用结构标签声明变量时struct关键字不可省略: part part1,part2; /**WRONG ***/ 实际上,part并不是类型名(与C+不同),没有struct 关键字,part是无意义的 由于结构标签使用时必须加上struct:关键字,所以程 序其它部分可以使用标签作为名字,不会冲突 简单起见,结构标签与结构变量可以同时声明: struct part int number; char name [NAMELEN+1]; int on hand; part1,part2; 14
使用结构标签 用结构标签声明变量时struct关键字不可省略: 实际上,part并不是类型名(与C++不同),没有struct 关键字,part是无意义的 由于结构标签使用时必须加上struct关键字,所以程 序其它部分可以使用标签作为名字,不会冲突 简单起见,结构标签与结构变量可以同时声明: part part1, part2; /*** WRONG ***/ struct part { int number; char name[NAME_LEN+1]; int on_hand; } part1, part2; 14
结构标签的使用 用同样结构标签声明的结构变量是兼容的: struct part part1 {528,"Disk drive",10}; struct part part2; part2 part1;/legal;have same type * 15
结构标签的使用 用同样结构标签声明的结构变量是兼容的: struct part part1 = {528, "Disk drive", 10}; struct part part2; part2 = part1; /* legal; have same type */ 15