【C语言】(14)结构体

结构体是C语言中一种允许将多个不同类型的数据项组合成一个单一的复合类型的数据结构。通过结构体,可以更加方便地管理和组织复杂的数据。

1. 结构体的定义

结构体通过关键字 struct 定义。结构体定义不会占用内存空间,它只是定义了一个模板。

struct Person {char name[50];int age;float salary;
};

在这里,Person 是结构体的名称,它包含了三个不同类型的成员:字符数组 name,整数 age 和浮点数 salary

结构体通过struct关键字来定义,其基本语法如下:

struct structure_name {type member1;type member2;...type memberN;
};

这里,structure_name是结构体的名称,member1member2、…、memberN是结构体的成员,可以是不同的数据类型。

示例

定义一个表示学生信息的结构体:

struct Student {char name[50];int age;float score;
};

2. 结构体变量的声明和初始化

结构体定义完成后,可以使用结构体类型声明结构体变量。结构体变量可以在声明时初始化。

声明结构体变量

结构体定义之后,可以声明结构体变量。结构体变量实际上是结构体类型的一个实例。

struct Person person1, person2;

初始化结构体变量

struct Student stu1 = {"Alice", 20, 92.5};

也可以分别为每个成员赋值:

struct Student stu1;
strcpy(stu1.name, "Bob");
stu1.age = 21;
stu1.score = 88.5;

3. 访问结构体成员

可以使用点运算符 . 来访问结构体的成员。

strcpy(person1.name, "Alice");
person1.age = 30;
person1.salary = 45000.50;

4. 结构体指针

结构体指针用于存储结构体变量的地址。通过结构体指针,可以访问结构体的成员。

声明结构体指针

struct Student *ptr;

将结构体变量的地址赋给指针

ptr = &stu1;

通过结构体指针访问成员

使用->操作符通过结构体指针访问结构体的成员:

printf("Name: %s\n", ptr->name);
printf("Age: %d\n", ptr->age);
printf("Score: %.2f\n", ptr->score);

5. 结构体数组

结构体数组是存储结构体类型元素的数组。它允许存储多个相同类型的结构体变量。

声明和初始化结构体数组

struct Student students[3] = {{"Alice", 20, 92.5},{"Bob", 21, 88.5},{"Charlie", 22, 95.0}
};

访问结构体数组的成员

for (int i = 0; i < 3; i++) {printf("Student %d: Name: %s, Age: %d, Score: %.2f\n", i+1, students[i].name, students[i].age, students[i].score);
}

6. 结构体和函数

结构体可以作为函数的参数传递,也可以作为函数的返回值。传递结构体给函数可以通过值传递和引用传递(通过指针)两种方式。

通过值传递结构体

void printStudent(struct Student stu) {printf("Name: %s, Age: %d, Score: %.2f\n", stu.name, stu.age, stu.score);
}

通过指针传递结构体

void modifyStudent(struct Student *stu) {stu->age += 1;  // 假设生日过后,年龄加1
}

6. 匿名结构体

可以创建没有名称的匿名结构体。

struct {char name[50];int age;
} person3;

7. 嵌套结构体

结构体可以包含另一个结构体作为其成员。

struct Date {int day;int month;int year;
};struct Employee {char name[50];struct Date birthday;
};

9. 动态结构体数组

可以动态分配结构体数组。

struct Person *ptr;
int n = 5;
ptr = (struct Person*) malloc(n * sizeof(struct Person));

10. 结构体与文件操作

结构体可以用于文件读写操作。

fwrite(&person1, sizeof(struct Person), 1, filePtr);
fread(&person2, sizeof(struct Person), 1, filePtr);

11. typedef 与结构体

使用 typedef 为结构体类型创建新名字。

typedef struct Person {char name[50];int age;float salary;
} Person;Person person1, person2;

这里,Person 现在成为结构体 struct Person 的别名。

12. 共用体与结构体

结构体内可以包含共用体(Union),这允许在同一内存位置存储不同的数据类型。

struct Data {union {int i;float f;char str[20];} data;
};

结构体是一种非常强大的特性,允许以有组织的方式处理相关数据项集合。

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

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

相关文章

H12-821_320

320.关于VRRP slave设备的描述,正确的是 A.当收到优先级为0的VRRP报文时,Slave会直接切换为 Master B.slave响应目的IP地址为虚拟IP地址的IP报文 C.当slave收到 Master发送的VRRP报文时,可判断 Master的状态是否正常 D.slave会丢弃目的MAC地址为虚拟MAC地址的IP报文 答案&#…

【AI视野·今日NLP 自然语言处理论文速览 第七十七期】Mon, 15 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Mon, 15 Jan 2024 Totally 57 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Machine Translation Models are Zero-Shot Detectors of Translation Direction Authors Michelle Wastl, Ja…

docker私有库

1.registry私有仓库 拉取registry镜像 docker pull registry 修改docker配置文件并重启 vim /etc/docker/daemon.json {"insecure-registries": ["172.16.23.23:5000"], #添加&#xff0c;注意用逗号结尾"registry-mirrors": ["ht…

MongoDB 中的事务

前言 在 MongoDB 中&#xff0c;对单个文档的操作都是原子的。因为可以在单个文档结构中使用内嵌文档和数据获得数据之间的关系&#xff0c;所以不必跨多个文档和集合进行范式化&#xff0c;这种结构特性&#xff0c;避免了很多场景中的对多文档事务的需求。 对于需要多个文档…

C# .Net Framework Swagger

1.安装 Swagger 在NuGet程序包中安装以下文件 Swashbuckle: Swagger&#xff1a; Swagger.Net: 2.在项目APP_Start 文件夹下面找到 SwaggerNet.cs文件 1.注释掉这两行代码 2.将PreStart方法的内容修改为以下 public static void PreStart() {RouteTable.Routes.MapHttpRoute(…

React18-完成弹窗封装

弹框封装 用法 // 创建 userRef.current?.open(create) // 修改 userRef.current?.open(edit,values){/* 创建用户 */} <CreateUser mRef{userRef} update{} />组件暴露open方法 文档地址&#xff1a;https://react.dev/reference/react/useImperativeHandle useIm…

iview DatePicker 日期选择组件在弹窗中使用transfer,导致选择日期弹窗会关闭的问题

背景&#xff1a;在弹窗里面使用日期选择组件&#xff0c;选择组件的面板被弹窗遮挡了部分&#xff0c;所以需要使用transfer属性&#xff0c;但是使用之后组件面板插入body中了&#xff0c;面板的事件会导致弹窗关闭。 解决方案&#xff1a; 添加上transfer属性和指定的date-…

JSON 方法

JSON 方法 JSON 数据格式规范JSON.stringify使用 replacer格式化&#xff1a;space自定义 toJSON JSON.parse使用 reviver 手写一个简易的 JSON.stringifyeval 实现 JSON.parse总结参考 JSON&#xff08;JavaScript Object Notation&#xff09;是表示值和对象的通用格式&#…

N65总账凭证管理凭证查询(sql)

--核算账簿 select code , name , pk_setofbook from org_setofbook where ( pk_setofbook in ( select pk_setofbook from org_accountingbook where 1 1 and ( pk_group N0001A11000000000037X ) and ( accountenablestate 2 ) ) ) order by code;--核算账簿 select code …

AI在数模中的应用(附2024年美赛AI规则解读)

近期一直有人私信询问AI对数模的应用。本次想借着2024年美赛对AI工具的使用说明已经去年国赛开会的结果&#xff0c;跟大家分享一下国赛、美赛对于AI的态度以及如何使用AI应用于数模。本文将基于本人常用的三种AI工具(ChatGPT、文心一言、NEW bing)进行讲解 根据2023年国赛总结…

armbian docker 部署 homeassistant 忘记密码重置密码

docker run -d \ --name homeassistant \ --privileged \ --restartunless-stopped \ -e TZMY_TIME_ZONE \ -v /etc/docker/ha:/config \ -v /run/dbus:/run/dbus:ro \ -p 8123:8123 \ ghcr.io/home-assistant/home-assistant:stable重置用户的密码&#xff0c;通过容器命令行 …

数据库技术栈 —— B树与B+树

数据库技术栈 —— B树与B树 一、复习二、MySQL中的B树应用 一、复习 B树是多路平衡查找树的意思 参考文章或视频链接[1] 【王道计算机考研 数据结构】 二、MySQL中的B树应用 这篇文章里的计算题还是讲的不错的。 参考文章或视频链接[1] 《探究MySQL的索引结构选型》

【Python】深度解读Python参数

目录 Python参数种类 Python参数定义 不定参数接收 限定传入参数方式 具体示例 位置参数示例 关键词参数示例 两种方法都支持的形式 参数默认值&#xff08;可选参数&#xff09; 参数默认值定义 引用类型默认值异常行为 参数类型声明 参数类型定义申明 函数返回值…

阿里云推出 3.x Java 探针,解锁应用观测与治理的全新姿势

作者&#xff1a;张铭辉、泮圣伟 前言 随着春节大促即将到来&#xff0c;为了确保线上业务高效稳定地运行&#xff0c;电商企业大多会对旗下关键业务应用进行多轮测试。通过模拟线上较高流量的请求&#xff0c;来观察服务性能的实际表现。以某企业的业务测试报告举例&#xf…

SpringClound项目相关

nacos本机模式非虚拟机启动也可正常连接 nacos中的配置中心相当于在application.yml中的相关配置&#xff0c;转移位置&#xff0c;内容同application.yml完全一样均可。 黑马项目导入后&#xff0c;依赖缺失&#xff1a; 首先尝试maven重新加载&#xff0c;控制台提示传递依…

稀疏场景高性能训练方案演变|京东广告算法架构体系最佳实践

近年来&#xff0c;推荐场域为提升模型的表达能力和计算能力&#xff0c;模型规模和计算复杂度大幅增加&#xff0c;同时&#xff0c;高规格硬件资源为模型迭代、算法优化带来了更大的机遇和挑战。为了应对模型规模和算力升级带来的存储、IO和计算挑战&#xff0c;京东零售广告…

解决WindowServer2022关于EDGE浏览器识自签证书问题

1、证书颁发机构服务打开MMC控制台 添加证书、证书模板 2、复制证书模板

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Gauge组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Gauge组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Gauge组件 数据量规图表组件&#xff0c;用于将数据展示为环形图表。 子组件 无…

Unity_Visual Effect Graph

Unity_Visual Effect Graph Unity可视化特效渲染虽不及Unreal Engine,然也还是吊打一众其他引擎的,粗浅整理一波吧,需要深入研究的点实在是太多了。 按照常规包管理方式安装Visual Effect Graph插件: 安装之后,示例文件夹中自带资源,拖入场景即可: 场景只是资源的显…

SOLIDWORKS Simulation 2024增强新功能

SOLIDWORKS 2024 新功能前瞻| SOLIDWORKS Simulation 功能增强 • 性能增强功能 • 壳体的接合交互 • 网格性能 • 欠约束实体检测 • 增强型轴承接头 • 收敛检查图解 • 去耦合混合自由体模式 • 复制算例时排除网格和结果 • 新增在网格化后及分析完成后自动保存模…