C语言中struct和union,结构体和联合体的区别
2018-03-28 10:30
281 查看
共同体union:
使几个不同类型的变量共占一段内存。
之间可以相互覆盖。
内存大小取最长变量的长度。
赋值时,由于共用一段内存,所以会对其他变量成员重写。
结构体struct:
不同数据整合成一个整体。
每个变量都有自己的内存空间。
内存大小为所有变量所占内存之和。
举个栗子:#include <stdio.h>
typedef union {//定义一个联合
int i;
struct {
char first;
char second;
} half;
} number;
int main() {
number number;
number.i = 0X4241;//联合成员赋值
printf("%c%c\n", number.half.first, number.half.second);
number.half.first = 'a'; //联合中,结构成员赋值
number.half.second = 'b';
printf("%x\n", number.i);
return 0;
}输出结果为:
AB
6261
分析:
在这里i和half结构是共用内存
number.i=0X4241 给i赋值后,内存中以二进制存储 0100 0010 0100 0001
按顺序对应到结构中
half.first=0100 0010 转换成十进制就是66 (字母A的asc码)
half.second=0100 0001 转换成十进制就是65 (字母B的asc码)
所以输出是AB
使几个不同类型的变量共占一段内存。
之间可以相互覆盖。
内存大小取最长变量的长度。
赋值时,由于共用一段内存,所以会对其他变量成员重写。
结构体struct:
不同数据整合成一个整体。
每个变量都有自己的内存空间。
内存大小为所有变量所占内存之和。
举个栗子:#include <stdio.h>
typedef union {//定义一个联合
int i;
struct {
char first;
char second;
} half;
} number;
int main() {
number number;
number.i = 0X4241;//联合成员赋值
printf("%c%c\n", number.half.first, number.half.second);
number.half.first = 'a'; //联合中,结构成员赋值
number.half.second = 'b';
printf("%x\n", number.i);
return 0;
}输出结果为:
AB
6261
分析:
在这里i和half结构是共用内存
number.i=0X4241 给i赋值后,内存中以二进制存储 0100 0010 0100 0001
按顺序对应到结构中
half.first=0100 0010 转换成十进制就是66 (字母A的asc码)
half.second=0100 0001 转换成十进制就是65 (字母B的asc码)
所以输出是AB
相关文章推荐
- 结构体struct和联合体union以及enum枚举体5的区别
- struct和union结构体和联合体的区别
- 联合体(union)和结构体(struct)的区别
- 联合体(union)和结构体(struct)的区别
- 联合体(union)和结构体(struct)的区别
- struct和union结构体和联合体的区别
- 结构体(struct)和联合体/共同体(union)的联系和区别——名企面试重难点
- 结构体(struct)和联合体/共同体(union)的联系和区别——名企面试重难点
- 结构体(struct)、联合体(union)、枚举(enum) 三种结构的区别及各个结构细节的总结
- C++学习总结(五)——结构体(struct),联合体(union)
- struct结构体和union联合体:字节对齐下的sizeof返回
- C语言进阶-第30讲:联合体及其与结构体的区别
- C语言中结构体(struct)和联合(union)的使用
- C语言多继承时子类与基类指针关系,union与struct区别,volatile修饰符作用
- C语言中,struct与union的区别
- 面试珠玑 C语言中union与struct的区别及sizeof的计算方式
- C语言和C++中结构体struct区别
- 联合体union 与结构体struct
- c语言结构体 和 typedef struct与struct的区别
- 结构体struct and 联合体 union