结构体,联合和枚举

来源:互联网 发布:钢琴淘宝 编辑:程序博客网 时间:2024/04/30 03:35

struct使用频率是union的大概100倍

结构体struct

struct tag(可选){    类型 1 标识符1;    ...    类型 N 标识符N;}变量定义(可选);//具体使用如下struct data_tag{    short dd;    short mm;    short yy;} my_birthday, xmas;struct data_tag easter, groundhog_day;//结构体中允许存在位段,无名字段,字对齐锁需要的填充字段struct pid_tag{    unsigned int inactive :1;    unsigned int :1;    unsigned int refcount :6;    unsigned int :0;    short pid_id;    struct pid_tag *link;};

结构体struct参数传递

  • int型变量和只包含一个int的结构体在参数传递时的行为可能完全不同,int变量一般会被传递到寄存器中,而结构体变量很有可能被传递到堆栈中
  • 结构体内放置数组,这时可以把它作为第一类型,把整个数组作为参数传递给函数,也可以把它作为函数返回值
struct s_tag { int a[100]; };struct s_tag a,b;a = b; //可行struct s_tag foo(struct s_tag sTmp);

联合体union

union tag(可选){    类型 1 标识符1...    类型 N 标识符N;}变量定义(可选);
  • 联合体一般用来节省空间,因为有些数据项是互斥的,同时存储它们,显然颇为浪费
  • 第二个用途是把同一个数据解释成两种不同的东西,如下所示,这个联合允许程序员课题提取整个32位作为int,也可以分别提取不同的位
union bits32_tag{    int whole;//32 bits    struct {char c0,c1,c2,c3;} byte//4个8 bits}value

枚举enum

enum tag(可选){    内容...}变量定义(可选);
  • 枚举都可以通过#define替代掉
  • 优点是枚举在调试中可见,宏一般在编译时就已经被丢弃了

Reference

C专家编程

0 0
原创粉丝点击