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

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

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

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

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

示例program
  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. }  
运行结果

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值