C语言——结构体、共用体
结构体、共用体
- 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语言——结构体、共用体相关推荐
- c语言结构体共用体枚举实例程序,10-C语言结构体-共用体-枚举
结构体是什么? 结构体和数组一样属于构造类型 数组是用于保存一组相同类型数据的,而结构体是用于保存一组不同类型的数组 定义结构体 在使用结构体之前必须先定义结构体类型,因为C语言不知道你的结构体中需要 ...
- c语言 结构体 选择题,C语言结构体共用体选择题(新).doc
C语言结构体共用体选择题(新).doc 1.变量a所占的内存字节数是.(假设整型int为4字节) struct stu char name20; long int n; int score4; a ; ...
- c语言 结构体 选择题,c语言结构体共用体选择题新
<c语言结构体共用体选择题新>由会员分享,可在线阅读,更多相关<c语言结构体共用体选择题新(9页珍藏版)>请在人人文库网上搜索. 1.假 设整 型 int 为 4 字节)1.变 ...
- c语言指针变量输出不了共用体,瘋子C语言札记(结构体/共用体/枚举篇)
瘋子C语言笔记(结构体/共用体/枚举篇) (一)结构体类型 1.简介: 例: struct date { int month; int day; int year; }; struct student ...
- C语言程序设计 细节总结(第9章 结构体共用体枚举)
第9章 结构体.共用体.枚举 9.1 结构体 1.对于同类型结构体变量之间可以整体一次赋值 9.2 指向结构体的指针 9.2.1结构体变量的指针 1.定义格式:struct 结构体名 *结构体指针变量 ...
- java jni 结构体_JNI基础 -- C++基础知识(结构体共用体 )
结构体 类似于Java中的Bean对象,可以将一些变量封装为一个结构体 声明结构体的关键字是struct,也可以通过typedef别名定义 举个栗子: struct Student { //不同的数据 ...
- 九、结构体共用体枚举
[1]结构体 1.概念: 由用户自定义的一种构造类型,用于描述一个复杂事物,表示多种不同类型数据的集合. 2.定义格式: struct 结构体名 { 数据类型 成员1; 数据类型 成员 ...
- 中国大学慕课 大连理工大学 C语言程序设计 第11周 结构与共用体
1 某班有5名同学,建立一个学生的简单信息表,包括学号.姓名.3门课程的成绩,编写程序,计算每名学生的平均成绩及名次.(30分) 题目内容: 某班有5名同学,建立一个学生的简单信息表,包括学号.姓名. ...
- C语言之结构体和共用体
C语言之结构体和共用体 算上这篇笔记加上之前的四篇笔记,C语言基础我们也就告一段落了,对于刚刚接触c语言的童鞋们来说,这些以及足够了,稍后我会发布数据结构,对于想要深入学习的童鞋可以继续关注.本人也算 ...
- 【C语言】结构体、共用体、位域
结构体 1. 结构体的声明方法 struct struct_name {data_type member1;data_type member2;.. }; 这是其中一种声明方式~ 2.定义一个结构体变 ...
最新文章
- 编写程序实验两个数的加减结果的判断_实验一 两个多字节数的加减运算 -
- 动画产业基础学习教程 Rad How to Class – Animation Industry Fundamentals
- rmi远程代码执行漏洞_【漏洞通告】Apache Solr远程代码执行漏洞
- 【浅谈】如何做好一名初级技术面试官
- 代码片段--批量生产库以及可执行文件的依赖关系
- 刚安装完的ubuntu安装谷歌浏览器
- 山东大学 2020级数据库系统 实验七
- mysql安装与测试,MySQL NDB 安装的安装配置与测试
- boost asio异步通信
- 每日算法系列【LeetCode 1004】最大连续1的个数 III
- cesium加载S3M白膜,通过分层设色实现渐变效果,设置点光源
- 开发一个套crm系统软件需要多少钱
- TikTok搬运视频怎么做,搬运怎样的视频最好
- 电影网站 php asp,asp电影网址导航大全 V20201218
- word锁定:解决Word文档由于文档保护而无法修改、查找、编辑的方法
- oracle中skimmer的意思,skimmer to是什么意思
- JSJ2021A6(时间限制:20000ms 内存限制:65536KB)
- 我做的三维立体图(增加做法和看法)
- 怎么样让自己的博客被谷歌和百度收录!
- 用ensp组建无线局域网