c++结构体、共用体和枚举
结构体类型
c++中的结构体成员既可以是数据,也可以是函数
c语言中定义结构体变量必须加struct(这也是很多时候和typedef),但是在c++里面,可以不加
结构体和类的不同在于,结构体中的变量默认是public类型,而类则默认是private
struct空间计算:
1)整体空间是占用空间最大成员(类型)的整数倍,但是在linux +c++环境下,如果最大成员类型占据的字节书超过4,那么整体空间是4的倍数即可。
2)数据对齐原则,内存按照结构提成员先后顺序排列,当排到该成员变量时候,其前面已占用的空间大小必须为该类型的整数倍,否则补齐(在linux系统下),当该类性占据空间》=4字节的时候,依旧仅需要是4的倍数即可。
struct s1{
char a;
double b;
int c;
char d;
};
在windows下是24,在linux下是20
对于包含子结构体的空间计算:
1)整体空间是子结构体与父结构体占用空间最大成员(类型)的整数倍,但是在linux +c++环境下,如果最大成员类型占据的字节书超过4,那么整体空间是4的倍数即可。
2)数据对齐原则,内存按照结构提成员先后顺序排列,当排到该成员变量时候,其前面已占用的空间大小必须为该类型的整数倍,否则补齐(在linux系统下),当该类性占据空间》=4字节的时候,依旧仅需要是4的倍数即可;当排到子结构体成员变量时候,其前面已占用的空间大小必须为子结构体中最大类型大小的整数倍,否则补齐(在linux系统下),当该类性占据空间》=4字节的时候,依旧仅需要是4的倍数即可。。
对于包含数组的结构体空间计算:
结构提中,数组是按照单个变量一个一个进行拜访,而不是视为整体。
stuct{
int a;
char b[8];
}
占用大小为12
综上,对于结构体中包含结构体或数组的情况,在考虑对齐或者总空间为最大元素占用空间的倍数的时候,亦数组或者结果体中单独元素(最大)占用的空间为准,但是结构体和数组本身占用的空间不变。
还有包含位域的结构体大小计算,这个暂时不管。
共用体类型
一次仅采纳一个变量,所占空间为各个成员占用空间最大者
枚举类型:
占用空加一定为4
c++结构体、共用体和枚举的更多相关文章
- C++结构、共用体、枚举
一.结构 结构是C++OOP的基石.学习有关结构的知识僵尸我们离C++的核心OOP更近. 结构是用户定义的类型,同一个结构可以存储多种类型数据,这使得将一个事物的不同属性构成一个对象成为了可能.另外C ...
- 5、数组&字符串&结构体&共用体&枚举
程序中内存从哪里来 三种内存来源:栈(stack).堆(heap).数据区(.date): 栈(stack) 运行自动分配.自动回收,不需要程序员手工干预: 栈内存可以反复使用: 栈反复使用后,程序不 ...
- C语言高级-结构,共用体,文件,链表
C语言结构 标准声明方式 struct student{ int age; char sex; }; 这个可以在main函数中定义: struct student ...
- 瘋子C语言笔记(结构体/共用体/枚举篇)
(一)结构体类型 1.简介: 例: struct date { int month; int day; int year; }; struct student { int num; char name ...
- C++复合类型(结构,共用体,枚举)
•结构是用户定义的类型,而结构的声明定义了这种类型的数据属性. 一.关键字struct声明: 定义了一种新类型 struct inflatable{ char name[20];//结构成员 fl ...
- C语言基础 (11) 结构体 ,共用体 枚举 typedef
1 课堂回顾 作用域与生命周期 2 static 局部变量 2 打字游戏 3 内存分区代码分析 4 结构体基本操作 (复合类型[自定义类型 #include <stdio.h> #incl ...
- 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符
[源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...
- C基础知识(8):结构体、共用体、位域
结构体 数组允许定义可存储相同类型数据项的变量,而结构体是C编程中另一种用户自定义的可用的数据类型,它允许用户可以存储不同类型的数据项. struct 语句的格式如下: struct [structu ...
- C语言------结构体和共用体
仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2 .实训目的及要求 3.源代码及运行截图 4 .小结 1 .实训名称 实训8:结 ...
- 【C语言入门教程】7.4 共用体
7.4 共用体 共用体又称为联合体,是由不同的数据类型组成的一个整体.与结构体不同的是,共用体每次只能使用其中一个成员.结构体的总长度是结构体所有成员长度之和,共用体的总长度是其中最长一个数据类型的长 ...
随机推荐
- DAX/PowerBI系列 - 累计总计(Cumulative Total, Running Total)
DAX/PowerBI系列 - 累计总计(Cumulative Total) 2017/07/23 更新:B列公式(见最后) 2019/08/08 更新:在可视化数据的时候,一定要选择日期维度的日期列 ...
- Deepin安装 ruby 包管理工具 RVM(适用于 Debian 系列)
1. 安装 GPG keys 先安装 gpg2 工具 sudo apt install gnupg2 再安装 keys gpg2 --recv-keys 409B6B1796C275462A17031 ...
- 使用T4模板为EF框架添加数据库实体注释(转)
1. 下载文件GetSummery.ttinclude2. 把我们下载下来的文件解压,将解压出来的文件放入解决方案中3. 修改下app.config,添加一个连接字符串: <add name=& ...
- Jade学习(六)之使用html2jade反编译
我们可以使用html2jade将html编译成jade 首先安装html2jade npm install html2jade -g 用法一:使用html2jade将html转为jade html2j ...
- pause模块
pause模块:暂停脚本执行 # ansible-doc -s pause- name: Pause playbook execution pause: minutes: // 暂停的真实分钟数 pr ...
- nginx.conf laravel 配置
server { listen 443; server_name www.liuhuanguang.cn; #填写绑定证书的域名 ssl on; ssl_certificate cert/1_www. ...
- Microsoft Azure Overview
Day1 Overview 1. Cloud - Internet scaling / Internet connects / Resource pool 2. Why the cloud? Rap ...
- SQL函数 Convert,dateadd
1.SQL中CONVERT转化函数的用法 格式:CONVERT(data_type,expression[,style])说明:此样式一般在时间类型(datetime,smalldatetime)与字 ...
- zencart后台修改首页meta_title、meta_keywords、meta_description
includes\languages\english\模板\meta_tags.php 首先,将meta_tags.php中常量HOME_PAGE_META_DESCRIPTION.HOME_PAGE ...
- python基础语法170题
语言特性 1.谈谈对 Python 和其他语言的区别2.简述解释型和编译型编程语言3.Python 的解释器种类以及相关特点?4.说说你知道的Python3 和 Python2 之间的区别?5.Pyt ...