结构体介绍(1)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

结构体(1)

  • 前言
  • 一、struct介绍
    • 结构体声明
    • 结构体创建和初始化
    • struct 的特殊声明
    • 结构体自引用
  • 二、结构体内存对齐
    • 2.1.对齐规则
  • 总结


前言

结构体
属于自定义类型,可以自定声明一个数据
列如:一本书{书名}、{价格}、{作者}、{书号}
这种自定义结构体能够很好的帮助解决问题


以下是本篇文章正文内容,下面案例可供参考

一、struct介绍

struct 是C语言的一种工具,该工具是为了解决一系列所需要内容所创建的。
1、struct 内容理解

在这里插入图片描述

结构体声明

1.1声明

struct cwz
{成员member-list
}变量名;

列如描述一本书:

struct Book
{char author[20];//作者char name[20];//书名float price;//价格char id[13];//书号
}b3,b4;//全局变量

结构体创建和初始化

1.2.1创建结构体
在这里插入图片描述
1.2.2结构体初始化
以书为例:

struct Book
{char author[20];//作者char name[20];//书名float price;//价格char id[13];//书号
}b3, b4;//全局变量
int main()
{struct Book b1 = { "coke","原神",5555.5,"2307030304" };//初始化  正序struct Book b2 = { .id = "2307030304",.name = "没结果",.price = 6666.6,.author = "可惜不是你" };//乱序
}

struct 的特殊声明

1.3.1匿名
匿名结构

在这里插入图片描述
匿名结构体初始化s={‘x’,100,3.14};

1.3.2struct匿名

//匿名结构体(只能用一次)
struct
{char c;int i;double b;
}s = {'x',100,3.14};int main()
{printf("%c %d %lf", s.c, s.i, s.b);return 0;
}

在这里插入图片描述

结构体自引用

1.4.1自引用

结构体的自引用类似与链表
在这里插入图片描述
假设要在内存中存储12345
在这里插入图片描述
1可以找到2,2可以找到3…以此类推
这就是链表的顺序表,
那么我们该怎么定义结构体节点才能实现以上的功能呢?
struct Node
{
int data;
struct Node n;
};

这样是否可以呢?
显然明显是不行的,因为结构体里面包含结构体,且不说结构体多大,单独从包含的问题就可以判断出定义这种结构体是错误的。

我们不妨用结构体指针来指向下个结构体节点
在这里插入图片描述

struct Node
{
int data;
struct Node* next;//指针
};

这样就可以实现自引用啦!!!

在这里介绍一个简便的方法
先用typedef 重命名 struct Node 为 Node
那么结构体指针就可以这么写:Node* next;

typedef struct Node
{int data;struct Node* next;//这里不能单独用Node* next,因为那时还没有重命名
}Node;

二、结构体内存对齐

2.1.对齐规则

在这里插入图片描述
2.1.1
首先定义个结构体
在这里插入图片描述
结构体
根据1、结构体的第一个成员对祈祷和结构体变量起始位置偏移量为0的地址处
在这里插入图片描述
根据2、其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处
-vs中默认值为8
在这里插入图片描述
int i 为4个字节那么与8的对齐数是4所以浪费3个空间从4的倍数开始算
根据3、结构体总大小为最大对齐数(结构体中每个成员变量都有一个对齐数),所有对齐数中最大的的整数倍
如:
int i的对齐数4 ,char c1 对齐数为1,char c2对齐数为1;
在这里插入图片描述
这个结构体总的大小为12;

总结

自定义类型struct实用性广:
结构体将同一对象的多个数据类型存储在一起。当想要存储同一对象的不同或相似数据类型的数据(例如姓名、地址、电话等)时,它会很有帮助。这使得维护整个记录变得非常容易,因为我们使用一个名称表示完整的记录。结构体允许在单个参数的帮助下将整组记录传递给任何函数。还可以创建一个结构数组来存储多个相似数据类型的数据!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/6412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

复习结构体

1.怎样使用结构体变量2.关于 . 和-> 的用法 pst -> age 会被计算机内部转化为(*pst).age,这就是 ->的含义,是一种硬性规定 像 float 类型和 double 类型 ,由于编码原因,一般都不能被精确存储 像 数字66.6在C…

【快速入门Linux】10_Linux命令—Vi编辑器

文章目录 一、vi 简介1.1 vi1.2 vim1.3查询软连接命令(知道) 二、打开和新建文件(重点)2.1 打开文件并且定位行2.2 异常处理 三、vi三种工作模式(重点)3.1 末行模式-命令 四、常用命令4.0 命令线路图4.1 移…

多态及相关

多态及相关 多态的概念多态实现的两个条件及特殊情况虚函数虚函数重写的例外C11 override 和 final 重载、覆盖(重写)、隐藏(重定义)的对比题目1抽象类接口继承和实现继承 题目2(很重要)多态的原理虚函数表为什么Derive中的func4()在监视窗口里没有显示出…

利用大模型提升个性化推荐的异构知识融合方法

在推荐系统中,分析和挖掘用户行为是至关重要的,尤其是在美团外卖这样的平台上,用户行为表现出多样性,包括不同的行为主体(如商家和产品)、内容(如曝光、点击和订单)和场景&#xff0…

Javascript基础(三)

Javascript基础(一) Javascript基础(二) 引用数据类型 在之前的文章中,我们提及了与基本数据类型并列的引用数据类型,当时提到引用数据类型大致分为三类:数组Array,函数Function&a…

GPT-ArcGIS数据处理、空间分析、可视化及多案例综合应用

在数字化和智能化的浪潮中,GIS(地理信息系统)和GPT(生成式预训练模型)的结合正日益成为推动科研、城市规划、环境监测等领域发展的关键技术。GIS以其强大的空间数据处理、先进的空间分析工具、灵活的地图制作与可视化能…

JavaEE初阶-多线程易忘点总结

文章目录 1.PCBPID文件描述符表内存指针状态上下文优先级记账信息tgid 2.线程与进程的区别3.sleep和interrupt方法的关系变量终止线程interrupt方法终止线程 4.线程状态5.出现线程不安全的原因线程在系统中是随即调度,抢占式执行的。多个线程修改同一个变量线程针对…

《MySQL对数据库中表的结构的操作》

文章目录 一、建表二、查看表结构所有能查看到数据库,表的操作痕迹的本质都是服务器保存下来了这些操作记录。 三、修改表1.改表名字2.添加表记录3.添加表的更多字段4.修改表的字段5. 删除表的字段 总结 以下的数据库表的操作全是基于user_db这个数据库操作的&#…

如何加入亚马逊云科技AWS特邀技领云合作博主

这一年来,小李哥帮助过上千名小伙伴学习AWS和考取认证,这次非常荣幸能和丸子爸比大哥、程序员学习日常成为第一批亚马逊AWS云领袖计划的特邀合作博主!感谢AWS培训与认证各位老师的支持,未来小李哥会继续坚持社区分享,带…

AC自动机

AC自动机 AC自动机有一个很出色的功能:实现多模式匹配。 多模式匹配:模式串有多个,主串只有一个,要进行多次模式串匹配。如果用KMP就要一个一个模式串进行匹配,效率低。AC自动机就可以做到,只要经过一些预…

【全网首出】npm run serve报错 Expression: thread_id_key != 0x7777

总结 困扰了一天!!!一直以为是自己哪里配置错了, 结果最后发现是node.js官方的问题, Node.js v16.x版本的fibers.node被弃用 本文阅读大概:3min #npm run serve时就报错 #找了一天的文章,找不…

# 从浅入深 学习 SpringCloud 微服务架构(八)Sentinel(1)

从浅入深 学习 SpringCloud 微服务架构(八)Sentinel(1) 一、sentinel:概述 1、前言 – 服务熔断 Hystrix 的替换方案。 1)2018年底 Netflix 官方宣布 Hystrix 已经足够稳定,不再积极开发 Hys…

JVM笔记2--垃圾收集算法

1、如何确认哪些对象“已死” 在上一篇文章中介绍到Java内存运行时的各个区域。其中程序计数器、虚拟机栈、本地方法栈3个区域随着线程而生,随线程而灭,栈中的栈帧随着方法的进入和退出而有条不紊的执行着入栈和出栈操作。每个栈帧中分配多少内存基本上…

组队竞赛和删除公共字符

这里附上两个题目的链接 题目一:删除公共字符_牛客题霸_牛客网 (nowcoder.com) 题目二:组队竞赛_牛客笔试题_牛客网 (nowcoder.com) 第一题 分析: 当我们看见这个题目的时候,可以使用传统的暴力查找方式,如判断第一个…

VsCode | 修改首页启动页 Logo

VsCode | 修改首页启动页 Logo 最终效果: 插件的安装 先安装插件 Custom CSS and JS Loader 插件配置 Ctrl Shift P 输入 打开用户设置,在末尾添加 "vscode_custom_css.imports": [""]下载 Logo 下载 Logo 点我下载 引入…

亚马逊云科技AWS免费证书-EC2服务器设计(含题库)

亚马逊云AWS官方程序员专属免费证书又来了!这次证书是关于AWS EC2实例的设计和搭建,EC2作为AWS服务的核心,是学好AWS的第一步。强推没有任何AWS背景和转码的小伙伴去学!学完也能变成AWS开发大神! 证书名字叫Getting St…

使用 TensorFlow 和 Keras 构建 U-Net

原文地址:building-a-u-net-with-tensorflow-and-keras 2024 年 4 月 11 日 计算机视觉有几个子学科,图像分割就是其中之一。如果您要分割图像,则需要在像素级别决定图像中可见的内容(执行分类时),或者从像…

Oracle23ai来了,23爱,全能、超级巨兽...

📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、My…

[图解]关于SysML v2(1)大刀阔斧 对比 伪创新圈子

1 00:00:03,960 --> 00:00:08,270 OMG在2月份,这里写了4月 2 00:00:08,440 --> 00:00:13,530 应该是2月,发布了 3 00:00:13,870 --> 00:00:17,700 SysML v2的 beta 2版本 4 00:00:17,870 --> 00:00:19,780 也是当前最新的版本 5 00:00:2…

ES的脑裂现象

目录 0 集群结点的职责1 什么是脑裂现象2 造成脑裂现象的原因2.1 网络问题(最常见)2.2 主节点负载过大,资源耗尽,别的结点ping不到主节点2.3 主节点JVM内存回收时间过长导致 3 脑裂现象的解决方案3.1 局域网部署3.2 角色分离&…