C语言--结构体详解

一.前言

为了保证文章的质量和长度,小编将会分两篇介绍,思维导图如下,本文主要讲解概念部分,其中关于结构体内存对齐、位段等更加详细的内容将会在下一篇加以介绍,希望大家有所收获🌹🌹

在这里插入图片描述

在C语言中,结构体指的是一种数据结构,是C语言中聚合数据类型(数组、结构体、联合体)的一类。
结构体在函数中的作用不是简便,其主要的作用就是封装,封装的好处就是可以再次利用,让使用者不必关心这个是什么,只要根据定义使用就可以了。

二.概念

2.1 为什么要有结构体

结构体是指由一系列具有相同类型或不同类型的数据构成的数据集合,可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。

在实际问题中,一组数据往往有很多种不同的数据类型。
例如,登记学生的信息,可能需要用到 char型的姓名,int型或 char型的学号,int型的年龄,char型的性别,float型的成绩。又例如,对于记录一本书,需要 char型的书名,char型的作者名,float型的价格。
在这些情况下,使用简单的基本数据类型甚至是数组都是很困难的。而结构体(类似Pascal中的“记录”),则可以有效的解决这个问题。
结构体本质上还是一种数据类型,但它可以包括若干个“成员”,每个成员的类型可以相同也可以不同,也可以是基本数据类型或者又是一个构造类型。

2.2 声明

struct tag//struct为结构体关键字 tag可自定义,可缺省
{member_list;//成员列表
};//变量名表列 必须放在成员列表的后面

示例:
在这里插入图片描述

2.3 定义结构体变量

  1. 法一: struct 结构体名 结构体变量名 示例如下:
    在这里插入图片描述
  2. 法二:可以与结构体声明同时定!义,简化了代码,示例如下:
    在这里插入图片描述

2.6 初始化

  1. 法一:定义变量的同时赋初值 示例如下
    在这里插入图片描述
  2. 法二:结构体嵌套初始化 示例如下
    在这里插入图片描述
  3. 请问下面的代码有问题吗?
typedef struct
{int data;Node* next;
}Node;

答案:错误 上面代码中的Node还不是一个类型 正确方案如下

typedef struct Node
{int data;struct Node* next;
}Node;

意为typedef把结构体 struct Node 重命名为Node 在这个语句执行完之后Node才能作为一个结构体类型被运用

2.5 访问成员操作符

结构体是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量

  • 访问成员可以通过以下两种方法实现:

    1. 直接访问:结构体.成员名
    2. 间接访问:结构体指针->成员名
  • 结构体传参时,要传结构体的地址
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 按顺序初始化和不按顺序初始化
    在这里插入图片描述在这里插入图片描述

三.总结

下一篇将会着重介绍上述思维导图中剩下的部分—结构体内存对齐、位段
创作不易,希望大家多多支持,有什么想法欢迎讨论🌹🌹

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

完整教学:胡须图像分割

胡须图像分割系统源码&数据集分享 [yolov8-seg-act&yolov8-seg-C2f-Parc等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Global Al lnnovatio…

LeetCode 热题100 之 栈

1.有效的括号 思路分析&#xff1a;我们可以使用栈&#xff08;stack&#xff09;来解决这个问题。栈是一种先进后出的数据结构&#xff0c;这与括号匹配的需求非常契合。 unordered_map<char, char> bracket_map&#xff1a;这个哈希表用来存储右括号与左括号的对应关系…

git clone,用https还是ssh

前言 在使用Git去克隆项目时&#xff0c;会遇到https和ssh等形式&#xff0c;这两种又有何种区别呢&#xff0c;本文将重点讨论在具体使用中的问题。 注:第一次使用Git 时&#xff0c;需要先设置全局用户名和邮箱&#xff0c;否则后续使用命令时会报错&#xff0c;也是提醒先添…

【深圳大学/大学物理实验2】霍尔效应及其应用实验预习参考

霍尔效应及其应用 总分&#xff1a;100 组卷人&#xff1a;系统管理员成绩&#xff1a;95 一、单选题 共 10 小题 共 50 分 1. (5分)测量霍尔电压的原理公式是&#xff1a; 学生答案&#xff1a;C √ A. B. C. D. 2. (5分)载流子浓度n的计算式…

[全网最完整最详细C++篇]第四篇:类和对象(上)

目录 1->面向过程和面向对象初步认识 2->类的引入 3->类的定义 4->类的访问限定符及封装 4.1 访问限定符 4.2封装 5->类的作用域 6->类的实例化 7->类的对象大小的计算 7.1 如何计算类对象的大小 7.2 类对象的存储方式猜测 7.3 结构体内存对齐规…

Linux 服务器使用指南:从入门到登录

&#x1f31f;快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 &#x1f31f; &#x1f6a9;博主致力于用通俗易懂且不失专业性的文字&#xff0c;讲解计算机领域那些看似枯燥的知识点&#x1f6a9; 目录 一…

汇编语言:冒泡排序

在数据区定义一个字节型变量a1&#xff0c;a1中存放了若个字符&#xff0c;$字符是其最后一个字符。 编写子程序 a1中的所有字符输出显示&#xff0c;直到‘$’结束&#xff08;需要用循环实现&#xff09;输出回车换行符号和逗号用提示信息提示用户输入8个数&#xff0c;以非数…

Netty篇(核心组件 - Channel)

目录 一、简介 二、ChannelFuture 三、CloseFuture 四、&#x1f4a1; 异步提升的是什么 一、简介 channel 的主要作用 close() 可以用来关闭 channelcloseFuture() 用来处理 channel 的关闭 sync 方法作用是同步等待 channel 关闭而 addListener 方法是异步等待 channel …

JavaScript void 运算符

void定义&#xff1a; void 运算符对给定的表达式进行求值&#xff0c;然后返回undefined。void是一个一元运算符&#xff0c;接受单个操作数&#xff0c;可以是任何类型&#xff0c;返回一个 undefined。 void语法&#xff1a; void 在表达式的左边&#xff0c;void 右边的…

Vue+Springboot 前后端分离的项目如何部署?

本文转载自&#xff1a;https://fangcaicoding.cn/course/11/58 大家好&#xff01;我是方才&#xff0c;目前是8人后端研发团队的负责人&#xff0c;拥有6年后端经验&3年团队管理经验&#xff0c;截止目前面试过近200位候选人&#xff0c;主导过单表上10亿、累计上100亿数…

sls日志服务采集json格式日志

springboot统计的json数据 1. 配置 Logback 输出 JSON 格式日志1.1添加依赖&#xff1a;1.2配置 Logback 输出日志&#xff1a; 2. 使用 LinkedHashMap 日志数据3. 将日志推送到 SLS4. 在阿里云 SLS 中查看日志5.补充&#xff1a;关于 JSON 格式输出5.补充&#xff1a;关于 JSO…

Python | Leetcode Python题解之第538题把二叉搜索树转换为累加树

题目&#xff1a; 题解&#xff1a; class Solution:def convertBST(self, root: TreeNode) -> TreeNode:def getSuccessor(node: TreeNode) -> TreeNode:succ node.rightwhile succ.left and succ.left ! node:succ succ.leftreturn succtotal 0node rootwhile nod…

天命人开店日记之选址考察(上)

本次开店的品类是老年用品&#xff0c;前期与合作伙伴交流&#xff0c;按照新的线上与线下结合方式销售老年代步车和智能电动轮椅&#xff0c;线上占据70%销量&#xff0c;线下占据30%。线下门店可作为一个体验中心&#xff0c;对于本区域内的用户可以到线下门店体验&#xff0…

万字长文读懂RAG

目录 RAG的整体架构设计 一、概览 1-Overview 2-Indexing 3-Retrival 4-Generation 二、优化元素提问 5-Multi Query多查询策略 6-RAG-Fusion多查询结果融合策略 7-Decomposition问题分解策略 Answer recursively Answer individually 8-Step Back问答回退策略 9…

MySQL系列:一句SQL,MySQL是怎么工作的?

对于MySQL而言&#xff0c;其实分为客户端与服务端。 服务端&#xff0c;就是MySQL应用&#xff0c;当我们使用net start mysql命令启动的服务&#xff0c;其实就是启动了MySQL的服务端。客户端&#xff0c;负责发送请求到服务端并从服务端获取数据&#xff0c;客户端可以有多种…

【Mysql NDB Cluster 集群(CentOS 7)安装笔记一】

Mysql NDB Cluster 集群(CentOS 7)安装笔记 NDB集群核心概念 NDBCLUSTER(也称为NDB)是一个内存存储引擎,提供高可用性和数据保存功能。 NDBCLUSTER存储引擎可以配置一系列故障转移和负载平衡选项,但从集群级别的存储引擎开始是最容易的。NDB集群的NDB存储引擎包含一整套…

使用VS Code时如何切换Python版本?VS Code中如何在Python3与Python2之间自由切换?

1. 使用VS Code时如何切换Python版本&#xff1f;VS Code中如何在Python3与Python2之间自由切换&#xff1f; 2. 准备 2.1. 已添加Python2与Python3的安装目录到环境变量的Path所对应的值里 2.2. 已安装VSCode的Python插件 没安装的话&#xff0c;用VSCode打开Py文件就会提示让…

爱回收根关键字获取对应品牌的ID API 返回值深入解析

在数字化时代&#xff0c;二手商品交易市场日益繁荣&#xff0c;其中爱回收作为一个重要的平台&#xff0c;提供了一个便捷的接口&#xff0c;使得开发者能够通过API获取对应品牌的ID。本文将详细介绍如何使用爱回收的API&#xff0c;通过根关键字来获取品牌ID&#xff0c;并提…

给自己域名生成tls证书并在服务器进行配置

背景 自己搭建的服务器&#xff0c;使用https访问时会报不安全&#xff0c;给人一种不靠谱的赶脚&#xff0c;于是乎&#xff0c;决定使用个免费的方式来配置个证书解决这个问题 解决 首先需要有自己的公网域名&#xff0c;我的是某里云购买的,如何购买域名这里不聊 需要一…