C语言中的结构体
文章目录
- 前言
- 一、结构体是什么?
- 二、结构体的定义
- 三、结构体的初始化
- 四、结构体的嵌套
- 五、结构体数组
- 1结构体数组的定义:
- 六、结构体指针
一、结构体是什么?
我们知道一群类型相同的数据组合到一起是数组,那一群不同类型的数据组合到一起就是结构体。
二、结构体的定义
#include<stdio.h>
int main(){
struct student {
int id;
char name[100];
int age;
};
//上面的我们就定义了一个student结构体,其中元素有id,name,age
}
三、结构体的初始化
1.普通初始化
#include<stdio.h>
int main(){
struct people
{
char name[100];//姓名
int age;//年龄
char sex;//性别
};
struct people person1 = {"高欢",50,'M'};
printf("%s\n", person1.name);
printf("%d\n", person1.age);
printf("%c\n", person1.sex);
}
运行结果:

2.指定成员变量初始化
#include<stdio.h>
int main(){
struct people
{
char name[100];//姓名
int age;//年龄
char sex;//性别
};
struct person2 = {
.sex = 'F',
.age = 20,
.name = "秦良玉"
};
printf("%s\n", person2.name);
printf("%d\n", person2.age);
printf("%c\n", person2.sex);
}
运行结果:

四、结构体的嵌套
1.结构体里面套了一个结构体,就是结构体中有结构体类型的元素。
2.里面的结构体需要定义在前面,而外层的结构体定义在后面。
嵌套结构体的定义:
//内层结构体
struct birthday {
int year;
int month;
int day;
};
//外层结构体
struct student {
int id;
char name[100];
int age;
struct birthday date;
};
嵌套结构体的代码案例:
#include<stdio.h>
int main(){
//结构体的嵌套其实就是结构体中的元素为结构体
//里面的结构体需要先定义,外层结构体需要后定义。
struct birthday
{
int year;
int month;
int day;
};
struct student
{
int id;
char name[200];
int age;
//结构体元素
struct birthday date;
};
//普通初始化
struct student s1 = {1,"李如松",20,2004,5,7};
printf("%d\n", s1.id);
printf("%s\n", s1.name);
printf("%d\n", s1.age);
printf("%d\n", s1.date.year);
printf("%d\n", s1.date.month);
printf("%d\n", s1.date.day);
//2.指定成员变量初始化
struct student s2 =
{
.id = 2,
.name = "斛律光",
.age = 18,
.date.year = 2006,
.date.month = 12,
.date.day = 10
};
printf("%d\n", s2.id);
printf("%s\n", s2.name);
printf("%d\n", s2.age);
printf("%d\n", s2.date.year);
printf("%d\n", s2.date.month);
printf("%d\n", s2.date.day);
}
运行结果:

五、结构体数组
和变量一样,多个同类型的变量组合在一起就形成了数组,那多个同类型的结构体组合在一起也形成了结构体数组。
1结构体数组的定义:
struct student
{
int id;
char name[200];
int age;
};
struct student s[5];//定义了一个长度为5的结构体数组
代码案例:
#include<stdio.h>
int main(){
//结构体数组:本质上是一个数组,只不过其数组中的元素为结构体
struct student
{
int id;
char name[200];
int age;
};
struct student s[10];
s[0].id = 1;
s[0].age = 18;
scanf("%s", &s[0].name);//手动输入name的值。
printf("%d\n", s[0].id);
printf("%s\n", s[0].name);
printf("%d\n", s[0].age);
}
运行结果:

六、结构体指针
结构体指针,与函数指针一样,本质上是指针,只不过该指针指向的变量为结构体类型
struct student
{
int id;
char name[200];
int age;
};
struct student s1 = {1,"结构体指针",100};
struct student *p = &s1;//结构体指针的定义
代码案例:
#include<stdio.h>
int main(){
//结构体指针:本质是一个指针其指向的类型为结构体类型的变量
struct student
{
int id;
char name[200];
int age;
};
struct student s1 = {1,"结构体指针",100};
struct student *p = &s1;
//结构体指针第一种输出结果体内容的方式
printf("%d\n", (*p).id);
printf("%s\n", (*p).name);
printf("%d\n", (*p).age);
//结构体指针第二种输出结果体内容的方式
printf("%d\n", p->id);
printf("%s\n", p->name);
printf("%d\n", p->age);
}
运行结果:

相关文章:
C语言中的结构体
文章目录 前言一、结构体是什么?二、结构体的定义三、结构体的初始化四、结构体的嵌套五、结构体数组 1结构体数组的定义:六、结构体指针 一、结构体是什么? 我们知道一群类型相同的数据组合到一起是数组,那一群不同类型的数据组…...
3.qml与c++模块化开发
目录 模块化开发封装c模块并使用封装qml模块并使用 模块化开发 什么是模块化开发呢? 举个例子: 我们有一台台式电脑,我们台式电脑有显卡,内存,磁盘,cpu,键盘,鼠标等 你可以将这些部…...
怎么使用github上传XXX内所有文件
要将 目录中的所有文件上传到 GitHub,你可以按照以下步骤进行: 创建一个新的 GitHub 仓库 登录到你的 GitHub 账户。 点击右上角的加号(),选择 “New repository”。 输入仓库名称(例如:202407…...
合作伙伴中心Partner Center中添加了Copilot预览版
目录 一、引言 二、Copilot 功能概述 2.1 Copilot 简介 2.2 Copilot 的核心功能 2.3 Copilot 的访问和使用 三、Copilot 的使用方法 3.1 Copilot 功能区域 3.2 Copilot 使用示例 3.2.1 编写有效提示 3.2.2 使用反馈循环 四、负责任的人工智能 4.1 Copilot 结果的可…...
Navidrome音乐服务器 + 音流APP = 释放你的手机空间
20240727 By wdhuag 目录 前言: 参考: Navidrome音乐服务器 Demo试用: 支持多平台: 下载: 修改配置: 设置用NSSM成服务启动: 服务器本地访问网址: 音流 歌词封面API&am…...
Prometheus安装部署
文章目录 1.Prometheus(普罗米修斯)安装部署1.1部署环境准备1.2部署prometheus1.3主机数据展示 2.Grafana安装部署2.1部署Grafana2.2配置Grafana数据源2.2配置Grafana仪表板 3.AlertManager安装部署3.1部署alertmanager3.2告警邮件发送配置3.3测试邮件告警效果3.4自定义邮件告警…...
算法(查找算法---二分查找/索引查找/哈希表查找)
二、查找算法 什么是查找算法: 在一个数据序列中,查找某个数据是否存在或存在的位置,在实际开发过程中使用的频率非常高,例如对数据常见的操作有增、删、改、查,增加数据时需要查询新增加的数据是否重复,…...
SQL labs-SQL注入(二)
环境搭建参考 SQL注入(一) 一,SQL labs-less2。 http://192.168.61.206:8001/Less-2/?id-1 union select 1,2,group_concat(username , password) from users-- 与第一关没什么太大的不同,唯一区别就是闭合方式为数字型。 二…...
go 语言踏出第一步
1、下载Go语言安装包:在官方网站(https://golang.org/dl/)上下载适合你操作系统的Go语言安装包。选择一个tar.gz格式的包。 2、解压安装包:打开终端,进入下载目录,并使用以下命令解压安装包: ta…...
SpringBoot-21 SpringBoot微服务的发布与部署(3种方式)
基于 SpringBoot 的微服务开发完成之后,现在到了把它们发布并部署到相应的环境去运行的时候了。 SpringBoot 框架只提供了一套基于可执行 jar 包(executable jar)格式的标准发布形式,但并没有对部署做过多的界定,而且为…...
在occluded Person Re-ID中,选择clip还是ViT作为backbone?
在遮挡行人再识别(Occluded Person Re-Identification, Occluded Person Re-ID)任务中,使用CLIP(Contrastive Language-Image Pre-Training)作为backbone和使用Vision Transformer(ViT)作为back…...
Linuxnat网络配置
📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 ☁️运维工程师的职责:监…...
77.WEB渗透测试-信息收集-框架组件识别利用(1)
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:76.WEB渗透测试-信息收集- WAF、框架组件识别(16) javaÿ…...
ExcelJS:轻松实现Excel文件的读取、操作与写入
文章目录 发现宝藏1. 简介2. 安装3. 创建工作簿4. 设置工作簿属性5. 添加工作表6.删除工作表7.访问工作表8. 列操作9. 行操作10. 单元格操作 发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝…...
Java 多线程技术详解
文章目录 Java 多线程技术详解目录引言多线程的概念为什么使用多线程?多线程的特征多线程的挑战 多线程的实现方式3.1 继承 Thread 类示例代码: 3.2 实现 Runnable 接口示例代码: 3.3 使用 Executor 框架示例代码: 3.4 使用 Calla…...
一份简单实用的MATLAB M语言编码风格指南
MATLAB M语言编码风格指南 1. 文件命名2. 函数命名3. 注释4. 变量命名5. 布局、注释和文档6. 代码结构7. 错误处理8. 性能优化9. 格式化输出 MATLAB M文件的编码规范对于确保代码的可读性、可维护性和一致性非常重要。下面是一份MATLAB M语言编码规范的建议,可以作为…...
ubuntu 环境下soc 使用qemu
构建vexpress-a9的linux内核 安装依赖的软件 sudo apt install u-boot-tools sudo apt install gcc-arm-linux-gnueabi sudo apt install g-arm-linux-gnueabi sudo apt install gcc#编译内核 下载 linux-5.10.14 linux-5.10.148.tar.gz 配置 sudo tar -xvf linux-5.10.1…...
Centos安装、迁移gitlab
Centos安装迁移gitlab 一、下载安装二、配置rb修改,起服务。三、访问web,个人偏好设置。四、数据迁移1、查看当前GitLab版本2、备份旧服务器的文件3、将上述备份文件拷贝到新服务器同一目录下,恢复GitLab4、停止新gitlab数据连接服务5、恢复备…...
【Python机器学习】朴素贝叶斯——使用Python进行文本分类
目录 准备文本:从文本中构建词向量 训练算法:从词向量计算概率 测试算法:根据现实情况修改分类器 准备数据:文档词袋模型 要从文本中获取特征,需要先拆分文本。这里的特征是来自文本的词条,一个词条是字…...
【linux】Shell脚本三剑客之grep和egrep命令的详细用法攻略
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
解析“道作为序位生成器”的核心原理
解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制,重点解析"道作为序位生成器"的核心原理与实现框架: 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...
Spring事务传播机制有哪些?
导语: Spring事务传播机制是后端面试中的必考知识点,特别容易出现在“项目细节挖掘”阶段。面试官通过它来判断你是否真正理解事务控制的本质与异常传播机制。本文将从实战与源码角度出发,全面剖析Spring事务传播机制,帮助你答得有…...
【2D与3D SLAM中的扫描匹配算法全面解析】
引言 扫描匹配(Scan Matching)是同步定位与地图构建(SLAM)系统中的核心组件,它通过对齐连续的传感器观测数据来估计机器人的运动。本文将深入探讨2D和3D SLAM中的各种扫描匹配算法,包括数学原理、实现细节以及实际应用中的性能对比,特别关注…...
IP选择注意事项
IP选择注意事项 MTP、FTP、EFUSE、EMEMORY选择时,需要考虑以下参数,然后确定后选择IP。 容量工作电压范围温度范围擦除、烧写速度/耗时读取所有bit的时间待机功耗擦写、烧写功耗面积所需要的mask layer...
虚拟机网络不通的问题(这里以win10的问题为主,模式NAT)
当我们网关配置好了,DNS也配置好了,最后在虚拟机里还是无法访问百度的网址。 第一种情况: 我们先考虑一下,网关的IP是否和虚拟机编辑器里的IP一样不,如果不一样需要更改一下,因为我们访问百度需要从物理机…...
GC1808:高性能音频ADC的卓越之选
在音频处理领域,高质量的音频模数转换器(ADC)是实现精准音频数字化的关键。GC1808,一款96kHz、24bit立体声音频ADC,以其卓越的性能和高性价比脱颖而出,成为众多音频设备制造商的理想选择。 GC1808集成了64倍…...
