@[TOC]
结构
结构变量
结构:具有不同数据类型的值(成员)的集合。
联合跟结构很类似,不同在于联合的成员共享同一存储空间。
struct{
int number;
char name[NAME_LEN+1];
int on_hand;
} part1,part2;
//part1,part2都是具有相同结构类型的结构变量
结构成员通过名字而不是位置访问(与数组的区别)
part1.number = 1;
//句点运算符优先级几乎高于所有其他运算符
结构变量的初始化
struct{
int number;
char name[NAME_LEN+1];
int on_hand;
} part1 = {528,"Disk drive",10},
part2 = {914,"Printer cable",5};
指定初始化:不需要与结构成员的顺序一致
{.number = 528,.name = "Disk drive",.on_hand = 10}
结构的赋值:part2 = part1
,直接赋值(与数组不同)
不能用==和!=判断结构是否相等
结构类型
结构标记
struct part{
int number;
char name[NAME_LEN+1];
int on_hand;
};
struct part part1,part2;
//不能漏掉struct,也可以声明在一起
typedef
typedef struct{
int number;
char name[NAME_LEN+1];
int on_hand;
}Part;
Part part1,part2;
命名结构时,两种写法都可以,但是结构用于链表时,必须使用结构标记。
嵌套的数组和结构
结构里面也允许嵌套结构。
结构数组的初始化
struct dialing_code{
char *country;
int code;
};
const struct dialing_code country_codes[] =
{{"China", 86}};
//数组country_codes[]的每一个元素都是一个结构
联合
编译器只为最大的成员分配足够的内存空间
union{
int i;
double d;
};
结构变量的成员存储在不同的内存地址中,联合的成员存储在同一内存地址中。
联合和结构的其他性质十分相似。
联合的作用:用联合来节省空间
构造混合的数据结构
每次对联合的成员赋值,都由程序负责改变标记字段的内容
枚举
许多程序中,我们只具有少量有意义的值。
我们为这种具有少量可能值的变量提供了一种专用类型——枚举。
enum = {CLUBS,DIAMONDS,HEARTS,SPADES} s1,s2;
区别:枚举常量的名字必须不同于作用于范围内声明的其他标识符。
枚举常量遵循C语言的作用域规则:如果枚举声明在函数体内,那么它的常量对外部函数来说是不可见的。
枚举标记和typedef
enum suit {CLUBS,DIAMONDS,HEARTS,SPADES};
enum = suit s1,s2;
typedef enum {CLUBS,DIAMONDS,HEARTS,SPADES}Suit;
Suit s1,s2;
枚举作为整数
默认情况下,编译器会把整数0,1,2……赋值给特定枚举中的变量
如果想要指定变量的值,可以在声明时指定。
enum suit {CLUBS=1,DIAMONDS=2,HEARTS=3,SPADES=4};
当没有为枚举常量指定值时,它的值比前面一个值大1.
C语言允许把枚举常量和普通整数混合。
网友评论