2.枚举元素不是变量,而是常数,因此枚举元素又称为枚举常量。因为是常量,所以不能对枚举元素进行赋值。
3.枚举值可以用来作判断。例如: if (day==mon) {…} if (day>mon) {…} 枚举值的比较规则是:按其在说明时的顺序号比较,如果说明时没有人为指定,则第一个枚举元素的值认作 0。例如,mon>sun,sat>fri。 C 语言教程 ?216?
4.一个整数不能直接赋给一个枚举变量,必须强制进行类型转换才能赋值。例如: day=(enum weekday)2; 这个赋值的意思是,将顺序号为 2 的枚举元素赋给 day,相当于workday=tue;
2.和struct的同与不同
union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。不过区别也挺明显:
结构体(struct)中所有变量是“共存”的——优点是“有容乃大”,全面;缺点是struct内存空间的分配是粗放的,不管用不用,全分配。
而联合体(union)中是各变量是“互斥”的——缺点就是不够“包容”;但优点是内存使用更为精细灵活,也节省了内存空间。
3.一个栗子 [cpp] view plain copy #include<stdio.h> union var{ long int l; int i; }; main(){ union var v; v.l = 5; printf("v.l is %d\n",v.i); v.i = 6; printf("now v.l is %ld! the address is %p\n",v.l,&v.l); printf("now v.i is %d! the address is %p\n",v.i,&v.i); } 结果: v.l is 5 now v.l is 6! the address is 0xbfad1e2c now v.i is 6! the address is 0xbfad1e2c [cpp] view plain copy <span style="font-family: Arial; line-height: 26px;"><span style="color:#ff0000;">联合体union所占内存空间大小就是<span style="font-family: SimSun; line-height: 26px;">最大长度的数据成员</span></span></span> 4. 大小端模式对 union 类型数据的影响下面再看一个例子:union{int i;char a[2];}*p, u;p = &u;p->a[0] = 0x39;p->a[1] = 0x38;p.i 的值应该为多少呢?这里需要考虑存储模式:大端模式和小端模式。大端模式( Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。小端模式( Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中。union 型数据所占的空间等于其最大的成员所占的空间。对 union 型的成员的存取都是相对于该联合体基地址的偏移量为 0 处开始,也就是联合体的访问不论对哪个变量的存取都是从 union 的首地址位置开始。 5.联合体union适用场合:union的使用场合,是各数据类型各变量占用空间差不多并且对各变量同时使用要求不高的场合(单从内存使用上,我觉得没错)。