共用体(联合)和结构体·
共用体 构造数据类型,也叫联合体
用途:使几个不同类型的变量共占一段内存(相互覆盖) 当数据项使用两种或更多格式可节省空间,假设管理的是一个商品目录,有些商品是整数,有些商品是字符,此时
结构体是一种构造数据类型
用途:把不同类型的数据组合成一个整体——-自定义数据类型
struct widget{
char brand[20];
int type;
union id{
long id_num;
char id_char[20];
}id_val;
}
widget prize;
if(prize.type == 1)
cin>>prize.id_val.id_num;
else
cin>>prize.id_val.id_char;
结构体变量所占内存长度是各成员占的内存长度的总和。
共同体变量所占内存长度是各最长的成员占的内存长度。
共同体变量中起作用的成员是最后一次存放的成员,在存入新的成员后原有的成员失去了作用.
匿名共用体 没有名称,其成员将成为位于相同地址处的变量。被视为一个变量
struct widget{
char brand[20];
int type;
union{
long id_num;
char id_char[20];
};
};
widget prize;
if(prize.type==1)
cin>>prize.id_num;
else
cin>>prize.id_char;
union myun
{
struct { int x; int y; int z; }u;
int k;
}a;
int main()
{
a.u.x =4;
a.u.y =5;
a.u.z =6;
a.k = 0;
printf("%d %d %d\n",a.u.x,a.u.y,a.u.z);
return 0;
}
union类型是共享内存的,以size最大的结构作为自己的大小,这样的话,myun这个结构就包含u这个结构体,而大小也等于u这个结构体的大小,在内存中的排列为声明的顺序x,y,z从低到高,然后赋值的时候,在内存中,就是x的位置放置4,y的位置放置5,z的位置放置6,现在对k赋值,对k的赋值因为是union,要共享内存,所以从union的首地址开始放置,首地址开始的位置其实是x的位置,这样原来内存中x的位置就被k所赋的值代替了,就变为0了,这个时候要进行打印,就直接看内存里就行了,x的位置也就是k的位置是0,而 y,z的位置的值没有改变,所以应该是0,5,6
C和C++之间结构体的深层区别
struct structA
{
char a;
char b;
int c;
};
structA a = {'a' , 'a' ,1}; // 定义时直接赋初值
在C++语言中struct具有了“类” 的功能,其与关键字class的区别在于struct中成员变量和函数的默认访问权限为public,而class的为private, C++中的struct保持了对C中struct的全面兼容(这符合C++的初衷——“a better c”)
部分参考 https://blog.csdn.net/u011388486/article/details/51336263
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Array - 34. Find First and Last Position of Element in Sorted Array
- Array - 31. Next Permutation
- Docker快速部署一个属于你自己的博客
- golang实现BST和AVL
- golang实现跳表(SkipList)
- 一致性哈希的golang实现
- Array - 75. Sort Colors
- Array - 309. Best Time to Buy and Sell Stock with Cooldown
- Array - 55. Jump Game
- 【技术创作101训练营】超简单的公司Git+个人Git共存方式
- css高度坍塌与清除浮动
- 无缝切换在线升级的终极探索
- promise详解
- Vuex是怎样进行状态管理的
- Matplotlib玩转动态可视化