当前位置: 首页 > news >正文

你是真的“C”——详解结构体知识点

你是真的“C”——详解结构体知识点😎

  • 前言🙌
  • 什么是结构体?🙌
  • 1. 结构体的声明🙌
    • 1.1 结构的基础知识
    • 1.2 结构的声明
    • 1.3 结构成员的类型
    • 1.4 结构体变量的定义和初始化
  • 2. 结构体成员的访问🙌
  • 3结构体传参🙌
  • 总结撒花💞

追梦之旅,你我同行

   
😎博客昵称:博客小梦
😊最喜欢的座右铭:全神贯注的上吧!!!
😊作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主!

😘博主小留言:哈喽!😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘
在这里插入图片描述

前言🙌

    哈喽各位友友们😊,我今天又学到了很多有趣的知识现在迫不及待的想和大家分享一下!😘我仅已此文,和大家分享C语言中结构体相关的知识点~ 都是精华内容,可不要错过哟!!!😍😍😍

什么是结构体?🙌

1. 结构体的声明🙌

1.1 结构的基础知识

    在我们生活的世界,是十分丰富多彩的,C语言虽然提供了许多的类型,但是对于描述这个丰富多彩的世界,是不够用的。因此,需要自定义一些类型。而结构体就属于自定义数据类型的一种。比如描述老师,描述同学,抑或是描述学生,该用什么类型呢?为了解决这些问题,结构体就出现了。
简单的概括来说:结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

1.2 结构的声明

那么结构体是如何声明的呢?接下来我举个栗子辅助大家理解一下:

typedef struct Stu
{char name[20];//名字int age;//年龄char sex[5];//性别char id[20];//学号
}Stu;//分号不能丢

1.3 结构成员的类型

结构的成员可以是标量、数组、指针,甚至是其他结构体。

1.4 结构体变量的定义和初始化

有了结构体类型,那如何定义变量,其实很简单。请看下图分析:

在这里插入图片描述当然,除了上述的初始化,结构体还支持嵌套初始化,也就是一个结构体的变量作为另外一个结构体的成员,然后初始化时可以进行嵌套初始化。这是C语言语法支持的。在结构体中,很常会见到与typedef结合使用,这是为什么呢?其实,typedef 可以起到结构体类型重命名的作用,目的是为了简单化结构体类型名。接下来举个栗子辅助大家理解:

typedef struct Node
{int data;struct Node* next;
}Node;int main()
{struct Node b1;Node b2;return 0;
}

有上述代码可以看出,定义结构体b1变量明显比定义b2要复杂,类型名得到简化提高了代码的阅读性。

2. 结构体成员的访问🙌

结构体变量访问成员

  1. 结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。结构体变量.结构体成员
  2. 结构体指针访问指向变量的成员有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。结构体指针->结构体成员

这里举个栗子:

#include <stdio.h>
struct Book
{char name[20];int price;
};
void print(struct Book* p)
{printf("%s %d\n", p->name, p->price);
}int main()
{struct Book b1 = {"C语言", 66};struct Book b2 = { .price = 80, .name = "数据结构"};//初始化成员变量可以不按照声明的顺序//结构体变量.结构体成员printf("%s %d\n", b1.name, b1.price);printf("%s %d\n", b2.name, b2.price);//结构体指针->结构体成员struct Book* p1 = &b1;print(&b1);return 0;
}

程序运行结果图:
在这里插入图片描述

3结构体传参🙌

结构体传参是怎么传的呢?其实也有两种传法,第一种是传值调用,另外一种就是传址调用啦那这两种传参的方法哪种更优呢?接下来我举个栗子辅助大家理解这两种传参方法。

#include <stdio.h>
struct S
{int arr[100];int n;
};
void print1(struct S ss)
{int i = 0;for (i = 0; i < 10; i++){printf("%d ", ss.arr[i]);}printf("\n%d\n", ss.n);
}void print2(struct S* ps)
{int i = 0;for (i = 0; i < 10; i++){printf("%d ", ps->arr[i]);}printf("\n%d\n", ps->n);
}int main()
{struct S s = { {1,2,3,4,5}, 100 };print1(s);print2(&s);return 0;

画图分析:
在这里插入图片描述

因为函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。因此,选择传址调用方法才是最优的选择。

结论:结构体传参的时候,要传结构体的地址。

总结撒花💞

   本篇文章旨在分享C语言详解结构体的相关知识点。希望大家通过阅读此文有所收获!😘如果我写的有什么不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘😘😘

相关文章:

你是真的“C”——详解结构体知识点

你是真的“C”——详解结构体知识点&#x1f60e;前言&#x1f64c;什么是结构体&#xff1f;&#x1f64c;1. 结构体的声明&#x1f64c;1.1 结构的基础知识1.2 结构的声明1.3 结构成员的类型1.4 结构体变量的定义和初始化2. 结构体成员的访问&#x1f64c;3结构体传参&#x…...

2023新华为OD机试题 - 单词接龙(JavaScript) | 刷完必过

单词接龙 题目 单词接龙的规则是: 可用于接龙的单词,首字母必须要与前一个单词的尾字母相同; 当存在多个首字母相同的单词时,取长度最长的单词; 如果长度也相等,则取字典序最小的单词; 已经参与接龙的单词不能重复使用; 现给定一组全部由小写字母组成的单词数组, 并指…...

第一章 一般错误信息 - 错误代码 0 到 99

文章目录第一章 一般错误信息 - 错误代码 0 到 99一般错误信息错误代码 0 到 99第一章 一般错误信息 - 错误代码 0 到 99 一般错误信息 错误代码被报告为 ERROR #nnn。这些错误代码有时称为 %Status 错误代码。 可以使用 DisplayError() 和 Error() 方法确定指定错误代码的错…...

MyBatis 之一(概念、创建项目、操作模式、交互流程)

1. MyBatis 是什么MyBatis 是一款优秀的持久层框架MyBatis 也是一个 ORM &#xff08;Object Relational Mapping&#xff09;框架&#xff0c;即对象关系映射它支持自定义 SQL、存储过程以及高级映射MyBatis 去除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作MyBatis…...

学习笔记:文件

因为有的数据&#xff0c;数据量极大。或者是你想把编译输出的内容存储起来&#xff0c;就可以使用文件 读文件中内容具体操作 来自C语言详解 FILE文件操作 - 知乎 (zhihu.com) 写入文件具体操作 同样来自 C语言详解 FILE文件操作 - 知乎 (zhihu.com) 当文件关闭时&#xff0c…...

高考结束了以后应该做的事情(个人经历的总结)

高考结束了以后应该做的事情 在本指导中&#xff0c;我总结了我大学期间我认为做的没有后悔&#xff0c;最正确的事情。同时&#xff0c;根据我的经历和我踩过的坑总结出来了这一份入学指南。 这个指导有点偏向于工科生&#xff0c;已经尽量偏向于所有专业了。对于所有专业的同…...

蓝桥杯:k倍区间

[蓝桥杯 2017 省 B] k 倍区间给定一个长度为 N 的数列&#xff0c;A1,A2,…AN&#xff0c;如果其中一段连续的子序列 Ai,Ai1,…Aj 之和是 K 的倍数&#xff0c;我们就称这个区间 [i,j] 是 K 倍区间。你能求出数列中总共有多少个 K 倍区间吗&#xff1f;输入格式第一行包含两个整…...

【思维模型】概率思维的价值:找到你的人生算法!打开你的人生格局!实现认知跃迁!

把同样公平的机会放在放在很多人面前,不同的人生算法,会得到迥然不同的结果。 概率思维是什么? 【ChatGPT】概率思维是一种通过使用数学模型来思考和评估不确定性事件的方法。它通过计算不同可能性的概率来预测事件的结果,并评估风险和机会。 概率思维的价值在于它可以帮…...

API文档自动生成工具

一、参考资料 从Python源码注释&#xff0c;自动生成API文档 二、问题引入 不管是开源还是闭源&#xff0c;要让所有人都能读懂你的代码这太难了&#xff0c;所以文档是很重要的。大部分情况&#xff0c;我们不希望维护一份代码再加上一份文档&#xff0c;这样做很容易造成文…...

7、MyBatis框架——MyBatis对一对一关系的处理、分步查询、MyBatis对一对多关系的处理

目录 一、项目框架搭建 二、在实体类中添加额外属性实现多表查询 1、mybatis两表关联查询 &#xff08;1&#xff09;实体类类型映射规则 &#xff08;2&#xff09;代码演示 2、分步查询 &#xff08;1&#xff09;autoMapping开启自动映射 &#xff08;2&#xff09;…...

电商数据监测——中国白酒行业数据浅析

大国盛世酿,万家潭酒香。中国白酒是中国特色文化之一。 2022年&#xff0c;国内白酒总产量为671.2万千升&#xff0c;处于持续下滑的态势。 白酒产量不佳&#xff0c;但线上平台的销售情况却成绩优异。2022年&#xff0c;京东平台白酒的年度总销量超3500万件&#xff0c;同比去…...

excel数据技巧:透视表快速统计年终业绩排名

年关了&#xff0c;各种数据多得要命&#xff0c;要汇总&#xff0c;要排名&#xff0c;这样才好颁奖发红包。今天&#xff0c;数据透视表出来为Excel人送温暖了&#xff0c;不用分两步做&#xff0c;鼠标拖两下&#xff0c;同步搞定业绩统计与排名。临近年末&#xff0c;各行各…...

TensorRT的Python接口解析

TensorRT的Python接口解析 文章目录TensorRT的Python接口解析4.1. The Build Phase4.1.1. Creating a Network Definition in Python4.1.2. Importing a Model using the ONNX Parser4.1.3. Building an Engine4.2. Deserializing a Plan4.3. Performing Inference点此链接加入…...

【信管11.5】合同、采购、招投标相关法规

合同、采购、招投标相关法规关于法律法规相关的内容&#xff0c;其实并没什么可以多说的&#xff0c;我也只是列出来&#xff0c;大家挑着背吧。当然&#xff0c;这里也不都是完完全全的法律条文&#xff0c;有一些也可能是一些归纳总结。更具体的内容大家可以参考教材以及查阅…...

使用 CSS 变量更改多个元素样式

使用 CSS 变量更改多个元素样式 var() 函数用于插入自定义的属性值&#xff0c;如果一个属性值在多处被使用&#xff0c;该方法就很有用。 custom-property-name 是必需的, 自定义属性的名称&#xff0c;必需以 – 开头。 value 可选。备用值&#xff0c;在属性不存在的时候使…...

面试题(二十五)设计模式

1. 设计模式 1.1 说一说设计模式的六大原则 参考答案 单一职责原则 一个类&#xff0c;应当只有一个引起它变化的原因&#xff1b;即一个类应该只有一个职责。 就一个类而言&#xff0c;应该只专注于做一件事和仅有一个引起变化的原因&#xff0c;这就是所谓的单一职责原则…...

使用红黑树模拟实现map和set

在STL的源代码中&#xff0c;map和set的底层原理都是红黑树。但这颗红黑树跟我们单独写的红黑树不一样&#xff0c;它需要改造一下&#xff1a; 改造红黑树 节点的定义 因为map和set的底层都是红黑树。而且map是拥有键值对pair<K,V>的&#xff0c;而set是没有键值对&a…...

【django项目开发】用户登录后缓存权限到redis中(十)

这里写目录标题一、权限的数据的特点二、首先settings.py文件中配置redis连接redis数据库一、权限的数据的特点 需要去数据库中频繁的读和写&#xff0c;为了项目提高运行效率&#xff0c;可以把用户的权限在每次登录的时候都缓存到redis中。这样的话&#xff0c;权限判断的中…...

算法总结c++

文章目录基本概念时间复杂度空间复杂度基本结构1. 数组前缀和差分数组快慢指针(索引)左右指针&#xff08;索引&#xff09;盛水容器三数之和最长回文子串2. 链表双指针删除链表的倒数第 n 个结点翻转链表递归将两个升序链表合并为一个新的 升序 链表链表翻转3. 散列表twoSum无…...

Python 之 NumPy 切片索引和广播机制

文章目录一、切片和索引1. 一维数组2. 二维数组二、索引的高级操作1. 整数数组索引2. 布尔数组索引三、广播机制1. 广播机制规则2. 对于广播规则另一种简单理解一、切片和索引 ndarray 对象的内容可以通过索引或切片来访问和修改&#xff08;&#xff09;&#xff0c;与 Pytho…...

不是删改,是升级:百考通智能降重+降AI,让语言更学术、更像“你”

在一个人工智能可以生成论文的时代&#xff0c;最荒诞的现实不是机器冒充人类&#xff0c; 而是人类因写得太像“一篇合格的学术论文”&#xff0c;被当作AI。 2026年&#xff0c;无数普通学子正陷入一场无声的困境&#xff1a; 你没用任何代写&#xff0c;却因逻辑清晰被系统…...

OpenClaw环境隔离方案:GLM-4.7-Flash多项目独立配置

OpenClaw环境隔离方案&#xff1a;GLM-4.7-Flash多项目独立配置 1. 为什么需要环境隔离&#xff1f; 去年夏天&#xff0c;我同时接手了两个截然不同的自动化项目&#xff1a;一个是帮朋友处理电商数据整理的私人需求&#xff0c;另一个是公司内部的知识库维护工作。当我兴冲…...

ChatGLM3-6B新手必看:断网可用的本地智能对话解决方案

ChatGLM3-6B新手必看&#xff1a;断网可用的本地智能对话解决方案 1. 引言&#xff1a;为什么你需要一个本地AI助手&#xff1f; 想象一下&#xff0c;你正在处理一份敏感的客户合同&#xff0c;需要AI帮你分析条款&#xff1b;或者你在一个没有稳定网络的环境里&#xff0c;…...

当神经网络遇上麻雀:转向架构架可靠性优化实战

基于CSSA -BR的转向架构架可靠性优化可靠性分析 静强度分析 稳健优化 仿真分析 问题定义&#xff1a; 研究的是包含区间变量和概率变量的混合结构可靠性分析问题。 提出方法&#xff1a; 提出了一种基于混沌麻雀搜索算法&#xff08;CSSA&#xff09;和贝叶斯正则化&#xf…...

OpenCV实战:用Python+SIFT+八点算法搞定双目视觉匹配(附完整代码)

OpenCV实战&#xff1a;PythonSIFT八点算法实现双目视觉精准匹配 在计算机视觉领域&#xff0c;立体匹配是一个经典而富有挑战性的问题。想象一下&#xff0c;当你用双眼观察世界时&#xff0c;大脑能自动计算出物体的距离——这正是双目视觉系统要模拟的过程。本文将带你用Pyt…...

ArcMap地图数字化实战:从加载地形图到保存成果的完整流程(附常见问题解决)

ArcMap地图数字化实战&#xff1a;从加载地形图到保存成果的完整流程&#xff08;附常见问题解决&#xff09; 在GIS领域&#xff0c;地图数字化是将纸质地图或图像转换为计算机可识别和处理的数字格式的基础工作。这项技能不仅是GIS专业学生的必修课&#xff0c;也是城市规划、…...

ADS 2025瞬态仿真实战:手把手教你搞定PCB微带线串扰分析(含变量单位避坑指南)

ADS 2025瞬态仿真实战&#xff1a;手把手教你搞定PCB微带线串扰分析&#xff08;含变量单位避坑指南&#xff09; 作为一名硬件工程师&#xff0c;在高速PCB设计中遇到串扰问题就像在迷宫里寻找出口——看似简单却处处暗藏陷阱。特别是当你在ADS 2025中按照教程一步步设置参数&…...

Vue项目中el-tabs标签栏的5个高级用法与避坑指南

Vue项目中el-tabs标签栏的5个高级用法与避坑指南 在Vue生态中&#xff0c;Element UI的el-tabs组件是构建标签式界面的首选方案。但很多开发者仅停留在基础使用层面&#xff0c;未能充分发挥其潜力。本文将揭示五个高阶技巧&#xff0c;助你打造更灵活、高效的标签系统。 1. 标…...

DroidRun:用自然语言指令重塑Android自动化体验

1. 当Android遇上自然语言&#xff1a;DroidRun如何重新定义自动化 还记得第一次用语音助手控制手机时的惊艳吗&#xff1f;说句话就能定闹钟、发消息&#xff0c;感觉像在演科幻片。但很快你就会发现&#xff0c;这些功能就像快餐店的固定套餐——只能点菜单上有的&#xff0c…...

LyricsX:突破平台限制,重构macOS歌词体验的开源解决方案

LyricsX&#xff1a;突破平台限制&#xff0c;重构macOS歌词体验的开源解决方案 【免费下载链接】LyricsX &#x1f3b6; Ultimate lyrics app for macOS. 项目地址: https://gitcode.com/gh_mirrors/ly/LyricsX 在流媒体音乐蓬勃发展的今天&#xff0c;音乐爱好者们却常…...