C语言union(联合体 共用体)
2016-08-31 00:00
225 查看
摘要: C语言union(联合体 共用体)
一直以来,union都是个很少用到的东西,对于这些不常用的结构往往记不住。这次看书又看到了,还是学习一下吧。
一般在Windows API的一些数据结构中才能看到这个union,其实并不复杂。本质上来说和结构体是一样的,但是从包装的角度来看有差异。
1、union中可以定义多个成员,union的大小由最大的成员的大小决定。
2、union成员共享同一块大小的内存,一次只能使用其中的一个成员。
3、对某一个成员赋值,会覆盖其他成员的值(也不奇怪,因为他们共享一块内存。但前提是成员所占字节数相同,当成员所占字节数不同时只会覆盖相应字节上的值,比如对char成员赋值就不会把整个int成员覆盖掉,因为char只占一个字节,而int占四个字节)
4、联合体union的存放顺序是所有成员都从低地址开始存放的。
下面看一个简单的代码:
#include <stdio.h>
typedef union{
char c;
int a;
int b;
}Demo;
int main(int argc, char **argv)
{
Demo d;
d.c = 'H';
d.a = 10;
d.b = 12;
printf("size: %d\n", sizeof(d));
printf("%c\t%d\t%d\n", d.c, d.a, d.b);
return 0;
}
原创文章,转载请注明:
本文出自程序人生 >> C语言union(联合体 共用体)
一直以来,union都是个很少用到的东西,对于这些不常用的结构往往记不住。这次看书又看到了,还是学习一下吧。
一般在Windows API的一些数据结构中才能看到这个union,其实并不复杂。本质上来说和结构体是一样的,但是从包装的角度来看有差异。
1、union中可以定义多个成员,union的大小由最大的成员的大小决定。
2、union成员共享同一块大小的内存,一次只能使用其中的一个成员。
3、对某一个成员赋值,会覆盖其他成员的值(也不奇怪,因为他们共享一块内存。但前提是成员所占字节数相同,当成员所占字节数不同时只会覆盖相应字节上的值,比如对char成员赋值就不会把整个int成员覆盖掉,因为char只占一个字节,而int占四个字节)
4、联合体union的存放顺序是所有成员都从低地址开始存放的。
下面看一个简单的代码:
#include <stdio.h>
typedef union{
char c;
int a;
int b;
}Demo;
int main(int argc, char **argv)
{
Demo d;
d.c = 'H';
d.a = 10;
d.b = 12;
printf("size: %d\n", sizeof(d));
printf("%c\t%d\t%d\n", d.c, d.a, d.b);
return 0;
}
原创文章,转载请注明:
本文出自程序人生 >> C语言union(联合体 共用体)
相关文章推荐
- C语言中break和continue的区别
- C语言结构体(struct)常见使用方法
- C语言基础学习基本数据类型-浮点型
- 第四周《C语言及程序设计》实践项目40 问题求解方法——穷举
- [LeetCode] 119. Pascal's Triangle II
- C++学习书单
- C和C++到底有什么关系
- C++虚析构函数
- C++虚函数与多态解析
- C语言的发展及其版本
- c++复习1练习题极其代码
- 对互斥锁的一种封装
- C++类的成员函数
- Clang解析C++程序(1)
- c++读写Excel文件
- 链表与状态机
- leetcode:Spiral Matrix II
- 7、c++版,在大学学的编程基础知识
- C语言的浮点型数值
- DX12 新手问题:HR Failed:hr failed in XX\....\d3dutil.cpp; line 110; error;...