C语言基础入门——自定义类型

article/2025/9/22 17:38:11

学习目标:

学习并了解C语言自定义类型

目录

学习目标:

一、结构体

                ●结构体的声明

                ●结构体的引用

                ●结构体的定义和初始化

                ●结构体的内存对齐

                ●结构体的传参

                ●结构体的位段(位段的可填充和可移植性)

二、枚举

●枚举的定义

●枚举的优点

●枚举的使用

三、联合

●联合的定义

●联合的特点

●联合的计算

学习内容:

学习时间:

学习产出:


一、结构体

结构体的声明:

struct s {int age;char name[20];int id;
};
//这就是一个结构体的声明,他含有三个成员,年龄,名字,ID结构体还可以匿名声明struct {int age;char name[20];int ID;
}x;
//这就是一个匿名类

结构体的自引用:

//结构体的自引用
struct S {int age;char name[20];struct S* next;
};

结构体的定义和初始化:

//结构体的定义和初始化
struct s {int age;char name[20];int id;
}s2 = { 34,"lisi",3432 };//可以在结构体后面定义一个结构体变量并初始化struct s s3 = { 23,"wangeu",87883 };
//在main函数外定义的变量为全局变量
int main()
{//而在main函数里面定义的结构体变量为局部变量,初始化时,用大括号时要对应结构体中的量struct s s1 = { 12,"zhangsan",123 };struct s s2;return 0;
}

结构体的内存对齐:

我们先计算一个结构体的大小:

 对于才接触结构体的,一看结果应该是6,为什么是12.

这就要讲到结构体的内存对齐规则;

        结构体的第一个成员变量放在结构体地址偏移量的0位置处。

        接下来的成员变量放在自己类型的整数倍的位置处;

        结构体的总体大小为成员变量中最大对齐数的整数倍接近数。

        对齐数:成员的类型大小与编译器的默认对齐数相比较取较小对齐数。

        如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整 体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

至于为什么存在最大对齐数:

对齐存储后便于使用时取出来 

同时也是提升性能

总体来说:

         结构体的内存对齐是拿空间来换取时间的做法。

同时,默认对齐数是可以修改的

        用到#pragma(8),就是将默认对齐数改为8

结构体的传参:

        

如果传参时传结构体过去将会增加内存,浪费空间。且会占用很大的栈区;

结构体的位段:

        1.位段的成员必须是 int、unsigned int 或signed int 。

         2.位段的成员名后边有一个冒号和一个数字。 

 这个位段的大小是8的原因:

我们要知道位段在内存中的存储规则

        1. 位段的成员可以是 int unsigned int signed int 或者是 char (属于整形家族)类型

        2. 位段的空间上是按照需要以4个字节( int )或者1个字节( char )的方式来开辟的。

        3. 位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段。

所以上面的代码:

        先开辟4个字节的空间,_a使用2个字节,还剩2个字节。但是_b要用3个,不够。内存又开辟4个字节。放完_b的3个字节后,还剩1个字节,刚好放_c的一个字节。

所以总大小就是8字节。

        位段一般不推荐使用,她的不确定性很大。

二、枚举

        枚举顾名思义就是列举;

        将可能的值一一列举出来:

        如一星期的取值有:星期一,星期二,星期三,星期四,星期五,星期六,星期七。

enum month{Mon,Turs,Wend
};

        以上定义的 enum month 都是枚举类型。

        {}中的内容是枚举类型的可能取值,也叫 枚举常量 。

        这些可能取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值。

枚举的优点:

        1. 增加代码的可读性和可维护性

        2. 和#define定义的标识符比较枚举有类型检查,更加严谨。

        3. 防止了命名污染(封装)

        4. 便于调试

        5. 使用方便,一次可以定义多个常量

三、联合

联合也是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。

 因为是公用一块空间,所以  a和c共用4个字节的空间

内存开辟的空间至少是最大类型的空间大小

联合体的大小:

        联合的大小至少是最大成员的大小。

        当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。

 最大对齐数为4

char arr的大小为5字节

总大小为4的2倍——8;


学习时间:

二零二二年十月九日


学习产出:

  • 技术笔记 1 遍
  • CSDN 技术博客 1 篇
  • 习的 vlog 视频 1 个

http://chatgpt.dhexx.cn/article/owU9QC3V.shtml

相关文章

1.计算机基础

目录 1.1计算机系统 1.3 计算机硬件 1.4 计算机常用计数制 1.5 数据表示 1.1计算机系统 计算机多种形式:电脑,笔记本,智能手机,服务器等; 两部分组成:硬件系统和软件系统。 1.1.1 世界上第一台计算机 世…

一、计算机基础

计算机基础 一、第 1 章 计算机基础知识1-1 计算机概述1-1-1 计算机的产生与发展(一)计算工具的发展(二)现代计算机的发展(三)计算机的分代(四)计算机新技术的发展 1-1-2 计算机的特…

计算机基础及入门

1、计算机基本概念 1.1、计算机是什么 计算机(computer): 俗称电脑,是现代一种用于高速计算的电子计算机器 特点: 数值计算;逻辑计算;存储记忆;能按照程序运行、自动、高速处理处理…

计算机基础入门

说明:计算机包含硬件(hardware)和软件(software)两部分。 计算机分为6大硬件: 1.CPU 即中央处理器(central processing unit,简称CPU)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。…

计算机基础的介绍

计算机概念 这是一个家用计算机的硬件和软件组成: 计算机软件代码最基层 — 固件,在计算机首次启动时由处理器运行一些引导加载程序,比如从U盘、光盘等读取操作 系统。这些程序永久储存在计算机内存中,所以称作固件。嵌入式操作…

计算机基础

文章目录 一、数据结构1. 排序算法快排归并排序堆 2. 结构堆和栈区别数组与链表数据库相关的B树、B树跳表LSM树红黑树前缀树 二、Java基础0 基础问题1. 抽象类和接口的区别2. final关键字、内部类、static3. 多态4. 成员变量和局部变量5. String类、StringBuilder类6. Java集合…

计算机基础知识——基础入门(一)

目录 CPU 一、CPU是什么 二、CPU 实际做什么 三、CPU 的内部结构 CPU 是寄存器的集合体 四、CPU 指令执行过程 内存 一、什么是内存 二、内存的物理结构 内存的读写过程 内存的现实模型 三、内存的使用 指针 数组是内存的实现 栈和队列 链表 二叉树 磁盘 认…

计算机基础教程(一)

《大学计算机基础教程PDF》下载链接 链接:https://pan.baidu.com/s/1PGsvh1oRD1euWUedEXNl8w 密码:zt4x 推荐先看下面的两本: 计算机是怎样跑起来的 程序是怎样跑起来的 这两本百度云连接,CSDN审核不通过,可以自己…

韩漫《绿色镌像》又名《绿色镌刻》

雕塑专业的学生马修在第一眼遇到陈时感受到了命运,而陈青宇看透了充满肮脏金钱和背叛的冷酷世界,他不断忍受着心中的疼痛,直到与马修相见,他开始展露自己的欲望...隐藏着不同欲望的两个男人的故事自此开幕——

推荐几个免费看漫画的资源网站,请低调收藏

1、木马动漫 https://omyschool.com/ 2、第6夜漫画 http://www.d6ye.com/ 3、土豪漫画 https://www.tohomh123.com/ 4、动漫屋 http://www.dm5.com/ 5、漫画柜 https://www.manhuagui.com/

电子漫画 - 轻轻松松

▲ 有的器件的功能只有在它损坏的时候才能够体现 1970,5 《大众电子》 ▲ 欧姆定律漫画 ▲ 另外一个欧姆定律漫画 ▲ LED应用时总是需要串联一个限流电阻 LED:你使我闪亮,否则我会灭亡 电阻:你是那么漂亮,直戳我的新房

有哪些漫画在线观看?最好是好看的完结漫画

在线漫画就是指把原有的漫画书籍以图片加文字的形式绘画出来,再连载于各大漫画网站或者漫画软件上,漫画在线观看,不用下载。而现在好看的漫画太多了,有些漫画是新番,有些漫画是完结作品。机智的我,当然是要…

【破解软件】知音漫客免费看更多漫画

历史文章推荐: 1、漫客栈破解版 2、漫画岛破解版 3、漫画台破解版 4、二次元漫画破解版 【软件名称】: 知音漫客(免费版) 【软件版本】: v_4.9.5 【软件大小】: 23.25MB 【支持系统】: 安卓系统 【亲测演示】: 软件无需登录包含更多漫画…

没有好看的百合漫画,纯纯的校园爱情漫画也不错

百合漫画一般都是指女孩与女孩之间的爱情故事,有很多漫迷小伙伴喜欢看这一类好看的百合漫画。现在动漫为了迎合读者的口味,越来越多的动漫作品中也加入了百合情节。不过呢,没有找到好看的百合漫画的同学,其实纯纯的校园爱情漫画也…

专属EE的精美电子漫画

关注、星标公众号,精彩内容每日送达 来源:网络素材 ▲ 图1 硬盘表面的指纹 ▲ 图2 电路中的维修人员 ▲ 图3 电路中的拆卸工人 ▲ 图4 电路进行局部维修 ▲ 图5 电路环境下的钻探工 ▲ 图6 磁盘表面的施工人员 ▲ 图7 搬运电阻 ▲ 图8 这个电容与有问题 …

HGAME

Week1 前端游戏 看代码 通关之后调用mota()方法 mota方法是一个算法,计算flag 想办法先调用mota方法就可以了 改一下代码即可(源代码dump一下,重新跑一下) 身份伪造类型 补充知识点 headers(…

免费、纯净、开源、无广告的全网漫画APP,可自定义32个漫画源!

之前Aliwen给大家分享过不少的看漫画的资源神器,不过有的之前解锁的神器,居然有的失效了,用不了了!,满足不了大家的需求了!😭 所以,Aliwen特地的找了一款在github上面的一款的开源神…

【无hhh】

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

韩漫ODDZ CITY上线一周获超高人气

韩漫ODDZ CITY正式上线一周在快看漫画平台获超高人气。 今日分享ODDZ CITY的经典台词。 所有的一切都始于一个不知名的黑客!- 萝茜 终于找到了。收到多少全部奉还 - 阿哔

H. H to O

题意: 是你有 k k k 个所给分子数,你通过将这个分子拆分再组合成另一个分子,问你最多能组合几个你想要的分子。 统计个数按照最小的那个就行。 AC代码: const int N 1e5 10; int n, m; string s, t; int a[1000], b[1000]; int ans, r…