结构体类型

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++结构体、共用体和枚举的更多相关文章

  1. C++结构、共用体、枚举

    一.结构 结构是C++OOP的基石.学习有关结构的知识僵尸我们离C++的核心OOP更近. 结构是用户定义的类型,同一个结构可以存储多种类型数据,这使得将一个事物的不同属性构成一个对象成为了可能.另外C ...

  2. 5、数组&字符串&结构体&共用体&枚举

    程序中内存从哪里来 三种内存来源:栈(stack).堆(heap).数据区(.date): 栈(stack) 运行自动分配.自动回收,不需要程序员手工干预: 栈内存可以反复使用: 栈反复使用后,程序不 ...

  3. C语言高级-结构,共用体,文件,链表

    C语言结构 标准声明方式 struct student{        int age;        char sex;    }; 这个可以在main函数中定义:  struct student ...

  4. 瘋子C语言笔记(结构体/共用体/枚举篇)

    (一)结构体类型 1.简介: 例: struct date { int month; int day; int year; }; struct student { int num; char name ...

  5. C++复合类型(结构,共用体,枚举)

    •结构是用户定义的类型,而结构的声明定义了这种类型的数据属性. 一.关键字struct声明:   定义了一种新类型 struct inflatable{ char name[20];//结构成员 fl ...

  6. C语言基础 (11) 结构体 ,共用体 枚举 typedef

    1 课堂回顾 作用域与生命周期 2 static 局部变量 2 打字游戏 3 内存分区代码分析 4 结构体基本操作 (复合类型[自定义类型 #include <stdio.h> #incl ...

  7. 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符

    [源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...

  8. C基础知识(8):结构体、共用体、位域

    结构体 数组允许定义可存储相同类型数据项的变量,而结构体是C编程中另一种用户自定义的可用的数据类型,它允许用户可以存储不同类型的数据项. struct 语句的格式如下: struct [structu ...

  9. C语言------结构体和共用体

    仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2 .实训目的及要求 3.源代码及运行截图 4 .小结 1 .实训名称 实训8:结 ...

  10. 【C语言入门教程】7.4 共用体

    7.4 共用体 共用体又称为联合体,是由不同的数据类型组成的一个整体.与结构体不同的是,共用体每次只能使用其中一个成员.结构体的总长度是结构体所有成员长度之和,共用体的总长度是其中最长一个数据类型的长 ...

随机推荐

  1. vs 小贴士

    1. ubuntu上vs code root执行 sudo code --user-data-dir="~/.vscode-root" 2. 设置vs code 打开在新的标签页打 ...

  2. Ubuntu下TP5隐藏入口文件

    部分内容是复制其他网友的博文,由于过了一段时间,找不到原文地址,再次表示感谢.以下是自己整理的,目的只是以后方便查阅 1.ubuntu或linux下找不到apache服务器配置文件httpd.conf ...

  3. python处理json文件(Yelp数据集)

    python脚本处理yelp数据集 import sys import json import re import os import time if __name__ == '__main__': ...

  4. mysql数据库常见错误代码列表

    mysql出错代码列表1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件导致删除数据库失败 1 ...

  5. MySQL数据库入门常用基础命令

    MySQL数据库入门———常用基础命令      数据——公司的生命线,因此在大多数的互联网公司,都在使用开源的数据库产品,MySQL也因此关注度与使用率非常的高,所以做为运维的屌丝们,掌握它的一些基 ...

  6. java数据结构复习02

    1.递归问题 1.1汉诺塔问题(递归) 问题描述三个柱子,起初有若干个按大小关系顺序安放的盘子,需要全部移动到另外一个柱子上.移动规则:在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘.移动 ...

  7. Zookeeper客户端使用(使用原生zookeeper)

    Zookeeper客户端使用 一.使用原生zookeeper 在pom.xml中加入依赖 <dependency> <groupId>org.apache.zookeeper& ...

  8. linux shell鼠标键盘快捷键

  9. python基础练习题7

    1.创建Person类,属性有姓名.年龄.性别,创建方法personInfo,打印这个人的信息2.创建Student类,继承Person类,属性有学院college,班级class,重写父类perso ...

  10. Jmeter启动jmeter-server.bat 报java.io.FileNotFoundException:rmi_keystore.jks 解决方法

    解决方法:1.找到apache-jmeter-5.0\bin\jmeter.properties 2.修改server.rmi.ssl.disable=true (记得去除server.rmi.ssl ...