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

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.kler.cn/a/387539.html

相关文章:

  • Chromium 中sqlite数据库操作演示c++
  • EDUCODER头哥 基于MVC模式的用户登录
  • ROM修改进阶教程------安卓14 安卓15去除app签名验证的几种操作步骤 详细图文解析
  • qt QFrame详解
  • 绘制3D图
  • C语言最简单的扫雷实现(解析加原码)
  • Ubuntu下如何管理多个ssh密钥
  • OSPF总结
  • Django 详细入门介绍
  • 使用Rust实现http/https正向代理
  • 动态规划 —— dp 问题-买卖股票的最佳时机含手续费
  • linux opp 模块
  • 深入解析 Transformers 框架(四):Qwen2.5/GPT 分词流程与 BPE 分词算法技术细节详解
  • JavaEE初阶---properties类+反射+注解
  • EasyUI弹出框行编辑,通过下拉框实现内容联动
  • go生成4位随机数字
  • 深入了解决策树:机器学习中的经典算法
  • 如何使用HighBuilder前端开发神器
  • ThingsBoard规则链节点:RPC Call Reply节点详解
  • Python的函数
  • 第一部分 Supervised Machine Learning: Regression and Classification
  • 嵌入式系统与机器学习的结合
  • oracle使用CTE递归分解字符串
  • python - leetcode【数据结构-算法】-入门/通关手册
  • Rust移动开发:Rust在iOS端集成使用介绍
  • 搭子小程序定制开发:全新找搭子之旅