自定义类型之结构体

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk

      ⸝⋆   ━━━┓
     - 个性标签 - :来于“云”的“羽球人”。 Talk is cheap. Show me the code
┗━━━━━━━  ➴ ⷯ

本人座右铭 :   欲达高峰,必忍其痛;欲戴王冠,必承其重。

👑💎💎👑💎💎👑 
💎💎💎自💎💎💎
💎💎💎信💎💎💎
👑💎💎 💎💎👑    希望在看完我的此篇博客后可以对你有帮助哟

👑👑💎💎💎👑👑   此外,希望各位大佬们在看完后,可以互赞互关一下,看到必回
👑👑👑💎👑👑👑   

 

在我们做项目的时候,我们需要使用的数据类型 是多样的,这就需要对数据的类型进行分装,比如我们要做一个学生信息管理系统,这里就需要一个自定义的学生类型,里面包含学生的学号,姓名,成绩,性别........



一·结构体类型的定义

1.什么是结构体

结构体是一些值的集合,而这些值又是具有不同的数据类型

在这里我们不禁想起数组:相同类型的值的集合

2.结构体类型的定义

 struct tag       / /关键字 struct不能少,关键字+结构体名字

{

 member-list;   //成员列表

} variable-list;  //结构体变量的列表,注意分号不能少

 小试牛刀一下:

 

二·结构体变量的创建

对于变量的创建有2种方法

1)在声明类型的同时进行变量的创建

2)声明完结构体类型之后进行变量创建

注意匿名结构体的使用:匿名结构体就是没有结构体名字,这种结构体只能使用一次,一般不建议这样写

三·结构体变量的初始化

1.创建变量 的同时进行初始化
struct Student
{
	int num;   //学号
	char name[20];   //姓名
	char sex[10];     // 性别
	int score[5];     //成绩
}stu1 = { 01,"lisi","man",{45,56,78,45,36} }, stu2 = { 02,"wnagwu","man",{45,74,85,96,75} };
2.指定结构体成员进行初始化

指定成员进行初始化这里需要借助成员访问符 .

注意当是结构体指针的时候,我们需要借助 ->来进行访问

struct Student
{
	int num;   //学号
	char name[20];   //姓名
	char sex[10];     // 性别
	int score[5];     //成绩
}stu1 = { .num = 01,.name = "lisi",.sex = "man",.score = {45,56,78,45,36} };

 以下这样也是可以的

}
struct Student
{
	int num;   //学号
	char name[20];   //姓名
	char sex[10];     // 性别
	int score[5];     //成绩
};
int main()
{
	struct Student stu1 = { .num = 01,.name = "lisi",.sex = "man",.score = {45,56,78,45,36} };
	return 0; 
}

四·结构体变量的访问

借助 . (成员访问符)进行访问

struct Student
{
	int num;   //学号
	char name[20];   //姓名
	char sex[10];     // 性别
	int score[5];     //成绩
};
int main()
{
	struct Student stu1 = { .num = 01,.name = "lisi",.sex = "man",.score = {45,56,78,45,36} };
	printf("%d\n", stu1.num);//访问stu1的num成员
	printf("%s\n", stu1.name);//访问stu1的name成员
	return 0; 
}

五·结构体的内存对齐以及结构体的大小

1.对齐的规则

首先得掌握结构体的对齐规则:

1. 第一个成员在与结构体变量偏移量为0的地址处。

2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。 VS中默认的值为8

3. 结构体总大小最大对齐数(每个成员变量都有一个对齐数)的整数倍

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

 2.应用

 分析:

对于a:占4个字节,对齐数是4

对于b:占1个字节,对齐数是1

对于c:占1个字节,对齐数 是1

此时总大小:6 ,但它不是最大对齐数4的整数倍所以最终结构体总大小是8

struct A
{
	char b;
	int a;
	char c;

};
int main()
{
	printf("%d\n", sizeof(struct A));
	return 0; 
}

 此时对应大小是9,但不是最大对齐数4的整数倍,所以最终结构体大小是12

七·结构体的传参

void Print(struct Student stu)
{
	printf("%d\n", stu.num);
}
void Print1(struct Student* stu)
{
	printf("%d\n", stu->num);
}
int main()
{
	//printf("%d\n", sizeof(struct A));//12
	//printf("%d\n", sizeof(struct B));//
	struct Student stu;
	Print(stu);
	Print1( &stu);
	return 0; 
}

 通过对比这个打印函数,我们不难发现,一个是传结构体的值,一个是传址

对于传值而言:形参和实参是2个对立的空间,当我们结构体的大小是非常大的时候,我们要是借助传值,这对内存的 开销是非常大的

对于传址来说,我们只需把这个地址传过去即可,对于这个地址的大小无非就是4 / 8个字节

相对而言我们是比较节省内存的

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Javaweb实现数据库简单的增删改查

JDBC介绍 JDBC ( Java Data Base Connectivity ) 是一 种 Java 访问 数据库 的技术,它提供 执行 SQL 语句的 Java API ,由 一组 类 和接口组成,可以为 不同的 数据库提供统一访问 JDBC工作原理 JDBC应用编程 1、准备…

北醒携全球首款256线车规量产激光雷达亮相广州国际车展

11月17日,北醒携全球首款256线车规量产激光雷达亮相广州国际车展。在车展期间,北醒还公布了与广州花都区人民政府达成投资合作,获滴滴自动驾驶投资以及与捷普联合打造的全球首条量产256线级别车规激光雷达的生产线即将贯通的等多条利好信息&a…

快时尚品牌Halara登上TikTok美国小店榜Top 5,运动健身风靡TikTok

TikTok Shop美国电商数据周榜(11/06-12)已出,具体信息如下: 上周总GMV达到5850万美元,日均出单840万美元;单日出单最高达2110万美元,是当前美国单日最高销售额; 截至11月12日&…

Postman接口测试 —— 设置断言和集合运行

一、常见的5种断言方法 Postman是一款非常强大的API接口调式工具,它自带断言方法,不需要学习JavaScript脚本,非常方便。 (1)Status code:Code is 200(校验接口返回结果的状态码) (2&#xff09…

轻松答题:用Python编写网页自动答题脚本助你高分通过

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 环境使用: Python 3.10 解释器 Pycharm 编辑器 模块使用: from selenium import webdriver —> 自动测试模块 pip install selenium3.141.0 <指定版本安…

Apache DolphinScheduler 3.0.0 升级到 3.1.8 教程

安装部署的流程可参考官网的文档 Version 3.1.8/部署指南/伪集群部署(Pseudo-Cluster) https://dolphinscheduler.apache.org/zh-cn/docs/3.1.8/guide/installation/pseudo-cluster 本文开始之前&#xff0c;我先补充说明一下升级 Apache DolphinScheduler 的几个关键点 元数…

C++——异常

作者&#xff1a;几冬雪来 时间&#xff1a;2023年11月21日 内容&#xff1a;C板块异常讲解 目录 前言&#xff1a; 异常&#xff1a; C语言传统处理错误的方式&#xff1a; 捕获异常&#xff1a; 异常的相关特性&#xff1a; string与抛异常: catch(...)&#xff1a; …

Monoxide relay机制和连弩挖矿

这篇文章就两个点&#xff0c;relay机制 、 连弩挖矿 relay 最终原子性 Eventual Atomicity 一笔跨链交易&#xff0c;从取款shard中发出&#xff0c;到存款shard中. 当收款shard中将这笔夸片交易打包上链后&#xff0c;原子性才执行结束。 这样做的延迟是比较小的。 如何应…

基于单片机的空气质量实时监测系统(论文+源码)

1. 系统设计 通过文献和市场调查&#xff0c;本设计的实现方案框架是以单片机为核心控制处理器搭建外围的功能模块如温度传感器模块、湿度传感器检测模块、二氧化碳传感器检测设备模块、无线通信模块和蜂鸣器声光报警提示模块来实现&#xff0c;辅以显示模块来展示。 该系统通…

什么是神经网络(Neural Network,NN)

1 定义 神经网络是一种模拟人类大脑工作方式的计算模型&#xff0c;它是深度学习和机器学习领域的基础。神经网络由大量的节点&#xff08;或称为“神经元”&#xff09;组成&#xff0c;这些节点在网络中相互连接&#xff0c;可以处理复杂的数据输入&#xff0c;执行各种任务…

Find My自行车|苹果Find My技术与自行车结合,智能防丢,全球定位

自行车&#xff0c;这项古老而简单的交通工具&#xff0c;近年来在中国经历了一场令人瞩目的复兴。从城市的街头巷尾到乡村的田园小路&#xff0c;自行车成了一种新的生活方式&#xff0c;一个绿色出行的选择。中国的自行车保有量超过两亿辆&#xff0c;但是自行车丢失事件还是…

为什么需要MuleSoft?如何与Salesforce协同工作?

MuleSoft通过一个集成平台将应用程序及其数据(跨云和内部云)连接起来。这被称为iPaaS&#xff0c;可将云应用程序相互集成&#xff0c;以及与本地和传统应用程序集成。 MuleSoft非常适合希望过渡到云的组织&#xff0c;提供了一种强大的集成解决方案。随着组织越来越依赖云及其…

赞评论收藏分享格雷希尔用于机器手抓取的G80P系列自动化螺纹快速接头的应用领域

格雷希尔GripSeal快速密封连接器针对螺纹孔的快速密封有二种操作方式&#xff0c;手动操作和气压驱动;但随着科技的不断发展&#xff0c;机器手越来越多的代替人工在工位上操作&#xff0c;于是我们又研发出适用于机器手抓取的G80P系列自动化螺纹快速连接器&#xff0c;使用机器…

「MobileNet V3」70 个犬种的图片分类

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

C 语言获取文件绝对路径

示例代码 1&#xff0c;不包含根目录绝对路径&#xff1a; #include <stdlib.h> #include <stdio.h>int main(void) {char *fileName "/Dev/test.txt";char *abs_path _fullpath(NULL, fileName, 0);printf("The absolute path is: %s\n", a…

【JavaEE初阶】 JavaScript基础语法——贰

文章目录 &#x1f332;条件语句&#x1f6a9;if 语句&#x1f6a9;三元表达式&#x1f6a9;switch&#x1f6a9;循环语句&#x1f388;while 循环&#x1f388;continue&#x1f388;break&#x1f388;for 循环 &#x1f340;数组&#x1f6a9;创建数组&#x1f6a9;获取数组…

2014年2月24日 Go生态洞察:FOSDEM 2014上的Go演讲精选

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

【教程】cpp转python Nanobind 实践 加速轻量版 pythonbind11

主要是尝试一下把c这边的函数封装打包给python用&#xff0c;选择nanobind的原因是&#xff1a;1. 优化速度快&#xff0c;2. 生成二进制包小&#xff0c;不过pythonbind11是更为广泛知道的&#xff0c;nanobind也是pythonbind11作者后续做的&#xff0c;可以查看作者写的 why …

多项式求和

题目描述 给定程序中 fun 函数的功能是&#xff1a;求出以下分数序列的前 n 项之和&#xff0c;并通过函数值返回 main 函数。 输入格式 输入参数。 输出格式 计算公式返回的结果。 输入输出样例 输入1 5 输出1 8.391667 python解&#xff1a; def fun(n):a1b2s0for…

【数据结构】HashMap 和 HashSet

目录 1.哈希表概念 2冲突 2.1概念 2.2 冲突-避免 2.3冲突-避免-哈希函数设计 2.4 冲突-避免-负载因子调节 ​编辑 2.5 冲突-解决-开散列/哈希桶 2.5冲突严重时的解决办法 3.实现 4.性能分析 5.与Java集合类的关系 1.哈希表概念 在顺序结构中&#xff0c;元素关键码和存…