方式(1)
struct
{
int number;
char *name ;
int on_hand;
} part1, part2;
方式(2)
struct part
{
int number;
char *name ;
int on_hand;
} ;
struct part part1,part2; 声明变量part1,part2;
方式(3)
struct part
{
int number;
char *name ;
int on_hand;
} part1, part2;
方式(4)typedef struct
{
int number;
char *name ;
int on_hand;
} part;
struct
{
int number;
char *name;
int on_hand;
} part1 = { 528, "Sam", 10}, part2 = { 100, "Joomla",3};
(1)结构的成员在内存中是按照声明的顺序存储的;
(2)相同类型的结构的变量可以赋值;
(3)通过结构变量的名字加点号和成员的名字 part1.number = 1356;
(1) void print_struct(struct Part p)
{
printf("%d",p.number);
}
(2)
struct Part init_part(int number, const char * name, int on_hand)
{
struct p;
p.number = number;
p.name = name;
p.on_hand = on_hand;
return p;
}
(1)给函数传递结构或者从函数返回结构都是生成结构中所有成员的副本。
(2)这样会带来比较大的开销。最好用指针来处理此类数据的传递;
(3)结构可以同惬套;
(4)可以用结构数组;
联合也是由一个或多个成员构成,而且这些成员可能具有不同的类型,但是编译器只为联合中最大的成员分配足够的内存空间,联合成员在这个空间内彼此要覆盖,联合只能保存一个值
union
{
int i;
double d;
} u;
如u.i = 4;
u.d = 5.6;
这样会使u.i的值会被u.d的值代替;
枚举的定义
(1)enum {CLUBS,DIAMONDS, HEARTS,SPADES} s1, s2;
(2)enum suit {CLUBS,DIAMONDS, HEARTS,SPADES};
enum suit s1,s2;
(3)typedef enum {CLUBS,DIAMONDS, HEARTS,SPADES} suit;
枚举赋值
(1)默认情况下编译器会把整数0,1,2赋值给特定枚举中的常量。
(2)enum suit {CLUBS = 1,DIAMONDS = 2, HEARTS,SPADES = 3}
(3)当没有为枚举常量指定值时,它的值比前一个值大1,第一个默认为0
(4)enum suit {CLUBS ,DIAMONDS = 7, HEARTS,SPADES} HEARTS 为8,SPADES为9
