结构体、共用体

  • 1.结构体
    • 基础知识
    • 代码基本写法
    • 内存对齐
  • 2. 共用体
    • 引论
    • 定义
    • 基础写法
    • 共用体大小

1.结构体

基础知识

类似于Java中的javaBean,可以将一些变量封装成一些对象。同样的,在C里面可以将一些其他的变量,封装成一个结构体,结构体和共用体表现的含义是一致的

代码基本写法

#include<stdio.h>struct Student
{int i;short j;
}s1,s2;void main(){struct Student student;student.i = 10;student.i = 5;s1.i = 10;s1.j = 3;printf("结构体大小%d:", sizeof(student));system("pause");
}

内存对齐

在上述代码中,定义了两个结构体,,在结构体体中,定义了两个变量,一个int类型,一个short类型,int类型是4个字节,short类型是2个字节,按常理,这个结构体是6个字节,但是通过sizeof(student)查看,是8个字节,为什么是8个字节呢?


这就涉及到C里面的内存对齐概念。在C执行的过程中,特别是给对象,结构体进行分配内存的时候,它是遵循内存对齐的规则。


内存对齐
定义:对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他也就被称为自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那他是自对齐的。


结构体大小
定义:当结构体需要内存过大,使用动态内存申请。结构体占用字节数和结构体内字段有关,指针占用内存计算4/8字节,因此传指针比传值效率更高


结构体存储原则
(1).结构体变量中成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍)
(2).结构体大小必须是所有成员大小的整数倍,也即所有成员大小的公数倍


看了上面定义,我们可以得知,刚刚我们定义的short类型,short类型是2个字节,由于在32位的CPU下,它最小的单位步长是4个字节,由于2个字节小于4个字节,所以系统会给short分配4个字节,只不过后面两个字节不会起作用,后面还有一个int类型,由于int类型有4个字节,所以这个结构体,一共8个字节。

为什么要基于内存对齐呢?

举个例子,张三要去请李四和王五去他家做客,由于李四和王五住在不同的楼层,所以,张三需要先去李四家邀请李四,再去王五家邀请,需要两次,这就是访问一个地址,它必须要做的两件事情,这就是没有去做实现内存对齐的情况下,那张三能不能只邀请一次呢?


答案是可以的,那就是让李四和王五同时处于一个房间


这个例子可以证明,内存对齐对于访问指针的效率非常重要的。

2. 共用体

引论

共用体和结构体类似,它都是表达一个数据类型的集合,只不过结构体,他需要内存开销更大一点。


定义

共用体是一种特殊的数据类型,允许在相同的内存位置存储不同的数据类型。可以定义一个带有多成员的共用体,但是任何时候都只能有一个成员带有值,共用体提供了一种使用相同的内存位置的有效方法。

基础写法

union Data{int i;float f;char str[20];
} data;

其调用方法与结构体类似。
注意:

共用体占用的内存应足够存储共用体中最大的成员。

共用体大小

类似于跳远,共用体大小采取内存最大的成员变量

C语言——结构体、共用体相关推荐

  1. c语言结构体共用体枚举实例程序,10-C语言结构体-共用体-枚举

    结构体是什么? 结构体和数组一样属于构造类型 数组是用于保存一组相同类型数据的,而结构体是用于保存一组不同类型的数组 定义结构体 在使用结构体之前必须先定义结构体类型,因为C语言不知道你的结构体中需要 ...

  2. c语言 结构体 选择题,C语言结构体共用体选择题(新).doc

    C语言结构体共用体选择题(新).doc 1.变量a所占的内存字节数是.(假设整型int为4字节) struct stu char name20; long int n; int score4; a ; ...

  3. c语言 结构体 选择题,c语言结构体共用体选择题新

    <c语言结构体共用体选择题新>由会员分享,可在线阅读,更多相关<c语言结构体共用体选择题新(9页珍藏版)>请在人人文库网上搜索. 1.假 设整 型 int 为 4 字节)1.变 ...

  4. c语言指针变量输出不了共用体,瘋子C语言札记(结构体/共用体/枚举篇)

    瘋子C语言笔记(结构体/共用体/枚举篇) (一)结构体类型 1.简介: 例: struct date { int month; int day; int year; }; struct student ...

  5. C语言程序设计 细节总结(第9章 结构体共用体枚举)

    第9章 结构体.共用体.枚举 9.1 结构体 1.对于同类型结构体变量之间可以整体一次赋值 9.2 指向结构体的指针 9.2.1结构体变量的指针 1.定义格式:struct 结构体名 *结构体指针变量 ...

  6. java jni 结构体_JNI基础 -- C++基础知识(结构体共用体 )

    结构体 类似于Java中的Bean对象,可以将一些变量封装为一个结构体 声明结构体的关键字是struct,也可以通过typedef别名定义 举个栗子: struct Student { //不同的数据 ...

  7. 九、结构体共用体枚举

    [1]结构体 1.概念: 由用户自定义的一种构造类型,用于描述一个复杂事物,表示多种不同类型数据的集合. 2.定义格式: ​ struct 结构体名 ​ { ​ 数据类型 成员1; ​ 数据类型 成员 ...

  8. 中国大学慕课 大连理工大学 C语言程序设计 第11周 结构与共用体

    1 某班有5名同学,建立一个学生的简单信息表,包括学号.姓名.3门课程的成绩,编写程序,计算每名学生的平均成绩及名次.(30分) 题目内容: 某班有5名同学,建立一个学生的简单信息表,包括学号.姓名. ...

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

    C语言之结构体和共用体 算上这篇笔记加上之前的四篇笔记,C语言基础我们也就告一段落了,对于刚刚接触c语言的童鞋们来说,这些以及足够了,稍后我会发布数据结构,对于想要深入学习的童鞋可以继续关注.本人也算 ...

  10. 【C语言】结构体、共用体、位域

    结构体 1. 结构体的声明方法 struct struct_name {data_type member1;data_type member2;.. }; 这是其中一种声明方式~ 2.定义一个结构体变 ...

最新文章

  1. 编写程序实验两个数的加减结果的判断_实验一 两个多字节数的加减运算 -
  2. 动画产业基础学习教程 Rad How to Class – Animation Industry Fundamentals
  3. rmi远程代码执行漏洞_【漏洞通告】Apache Solr远程代码执行漏洞
  4. 【浅谈】如何做好一名初级技术面试官
  5. 代码片段--批量生产库以及可执行文件的依赖关系
  6. 刚安装完的ubuntu安装谷歌浏览器
  7. 山东大学 2020级数据库系统 实验七
  8. mysql安装与测试,MySQL NDB 安装的安装配置与测试
  9. boost asio异步通信
  10. 每日算法系列【LeetCode 1004】最大连续1的个数 III
  11. cesium加载S3M白膜,通过分层设色实现渐变效果,设置点光源
  12. 开发一个套crm系统软件需要多少钱
  13. TikTok搬运视频怎么做,搬运怎样的视频最好
  14. 电影网站 php asp,asp电影网址导航大全 V20201218
  15. word锁定:解决Word文档由于文档保护而无法修改、查找、编辑的方法
  16. oracle中skimmer的意思,skimmer to是什么意思
  17. JSJ2021A6(时间限制:20000ms 内存限制:65536KB)
  18. 我做的三维立体图(增加做法和看法)
  19. 怎么样让自己的博客被谷歌和百度收录!
  20. 用ensp组建无线局域网

热门文章

  1. A Basic Image Viewer
  2. ant design图片hover蒙层
  3. 使用Retrofit+RxJava下载文件并实现APP更新
  4. 设备管理系统软件都有哪些功能?
  5. 高中计算机竞赛在哪学,信息学奥赛获奖学生,都去哪高就了?
  6. 经典再现交互设计那些事儿(二):交互常用的工具和方法
  7. FCPX插件:视频稳定防抖动插件 Lock and Load X v2.0
  8. NE5532芯片部分电路原理解读
  9. 专题总纲目录 计算机学科基础
  10. 相对虚拟地址,虚拟地址,文件偏移地址