结构体与联合体的用法
来源:互联网 发布:三菱plc模拟软件 编辑:程序博客网 时间:2024/05/01 10:16
我觉得联合体的优点从另一方面来讲就是缺点:
1、使用联合体可以节省空间.
有时我们需要一种类型即能保存整型数,又能保存浮点数.
这时如果定义成结构体类型, 如:
typedef struct {
int i;
float f;
} Number;
当使用该结构体来存储整型数或浮点数时,这样很明显会造成内存浪费。
同样的需求,如果用联合体来定义,如:
typedef union {
int i;
float f;
} Number;
定义一个联合体类型变量:
Number u;
当需要保存整型数时,可以将整型数保存到联合体的i成员中,
u.i = 10;
后面又需要保存浮点数时,可以写成:
u.f = 70.8;
由于联合的成员重叠存储,那么当后面一条赋值语句执行完后,将抹去前面保存在联合体成员i里的值.
如果后面需要测试u.i的值,那么它会显示出无意义的内容.这样容易造成混淆.
2、使用联合可以用来构造混合的数据结构.
如用上面的联合体类型来定义一个数组,
Number number_arr[100];
这个数组中的元素既能保存整型数,用能保存浮点数.
由于联合体同一时间内只能保存一种类型的成员,因此没有简便的方法可以表明联合最后的成员,前面已经指出, 当联合体中元素类型不正确时,甚至会出现无意义的情况.
这个问题的一个解决方案是为结构添加一个标记字段, 结构中包含联合体, 如:
typedef struct {
int flag;
union {
int i;
float f;
}
} Number;
当flag为0时,表示为联合体中保存的元素为整型数;flag=1时,表示联合中保存的为浮点数;
每次更新结构中联合元素保存的类型时,都需要更新结构体中的标记变量.
这样比一般的更新方式要多一步的操作。
同时,标记字段也需要占用空间,有时候这样做,可能会占浪费更多的空间.
1、使用联合体可以节省空间.
有时我们需要一种类型即能保存整型数,又能保存浮点数.
这时如果定义成结构体类型, 如:
typedef struct {
int i;
float f;
} Number;
当使用该结构体来存储整型数或浮点数时,这样很明显会造成内存浪费。
同样的需求,如果用联合体来定义,如:
typedef union {
int i;
float f;
} Number;
定义一个联合体类型变量:
Number u;
当需要保存整型数时,可以将整型数保存到联合体的i成员中,
u.i = 10;
后面又需要保存浮点数时,可以写成:
u.f = 70.8;
由于联合的成员重叠存储,那么当后面一条赋值语句执行完后,将抹去前面保存在联合体成员i里的值.
如果后面需要测试u.i的值,那么它会显示出无意义的内容.这样容易造成混淆.
2、使用联合可以用来构造混合的数据结构.
如用上面的联合体类型来定义一个数组,
Number number_arr[100];
这个数组中的元素既能保存整型数,用能保存浮点数.
由于联合体同一时间内只能保存一种类型的成员,因此没有简便的方法可以表明联合最后的成员,前面已经指出, 当联合体中元素类型不正确时,甚至会出现无意义的情况.
这个问题的一个解决方案是为结构添加一个标记字段, 结构中包含联合体, 如:
typedef struct {
int flag;
union {
int i;
float f;
}
} Number;
当flag为0时,表示为联合体中保存的元素为整型数;flag=1时,表示联合中保存的为浮点数;
每次更新结构中联合元素保存的类型时,都需要更新结构体中的标记变量.
这样比一般的更新方式要多一步的操作。
同时,标记字段也需要占用空间,有时候这样做,可能会占浪费更多的空间.
- 结构体与联合体的用法
- 联合体与结构体的区别
- 联合体的用法与特点
- 联合体的用法与特点
- 联合体里面的结构体
- 结构体,联合体的对齐
- 共用体(联合体)与结构体的区别
- 共用体(联合体)与结构体的区别
- 共用体(联合体)与结构体的区别
- C语言中的联合体与结构体
- 第七节 结构体与联合体
- 联合体union 与结构体struct
- C语言-结构体与联合体
- C语言结构体与联合体
- 【C语言常识】结构体与联合体
- 【C/C++】结构体和联合体的区别,以及枚举类型的用法
- 指针、结构体、联合体的安全规范
- 结构体、联合体、枚举的特性
- pam_ldap详细配置
- 【转】 Java开源Web测试工具列表
- 关于sizeof(转载)
- windows下修改php.ini位置
- 推荐20个关于CSS3优秀学习资源
- 结构体与联合体的用法
- 将数据库查询结果插入到相关表格的若干事项
- Batch Jobs
- SQL语句
- CDC常用
- SQL查询语句精华
- Java开源分词系统IKAnalyzer学习(二) 架构
- 编程技巧
- 我们安全吗?