首页 > 代码库 > C语言基础知识----联合 && 枚举 && 结构体

C语言基础知识----联合 && 枚举 && 结构体

结构体
struct 结构体标签(可选)
{
    类型1 标识符1;
     类型2 标识符2;
     .......
}(变量定义可选);

联合
union 可选的标签
{
     类型1 标识符1;
     类型2 标识符2;
     ........

}可选的变量定义;
联合与结构体相似,但内存布局上存在关键性的区别。结构体中每个成员顺序存储;而在联合中,所有的成员都是从偏移量为零处开始存储(位置是重叠的),并且在某一时刻,只有一个成员真正存储于改地址

枚举(它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型)
enum 可选标签{内容 .....}可选变量定义;
若对列表中的某个标识符进行了赋值,那么紧接其后的那个标志符就比所赋值大1.但对于前面未定义的标识符不能反推
枚举中的名字通常一直在调试器中可见,可以在调试代码时使用;而#define宏定义的常量,一般编译时就被替换掉了。

示例program
[cpp] view plaincopyprint?
  1. #include <stdio.h>  
  2. struct s  
  3. {  
  4.      int a;  
  5.      char c;  
  6. } s1;  
  7. enum e  
  8. {  
  9.      a,b=3  
  10. }e1;  
  11. union u  
  12. {  
  13.      int a;  
  14.      int b;  
  15.      char c;      
  16. }u1;  
  17. int main(void)  
  18. {  
  19.      s1.a=3;  
  20.      u1.a=3;  
  21.      u1.b=4;  
  22.      e1=b;  
  23.      printf("struct:s1.a=%d\n",s1.a);  
  24.      printf("enum:e1_b=%d\n",e1);  
  25.      printf("union:u1.a.&=%x\n",&u1.a);  
  26.      printf("union:u1.b.&=%x\n",&u1.b);  
  27. }  
运行结果

从运行结果可知联合中所有成员共用一个存储地址,同时有且只有一个存在。

C语言基础知识----联合 && 枚举 && 结构体