结构体详解+代码展示

系列文章目录

🎈 🎈 我的CSDN主页:OTWOL的主页,欢迎!!!👋🏼👋🏼
🎉🎉我的C语言初阶合集:C语言初阶合集,希望能帮到你!!!😍 😍
🔍🔍我的C语言进阶合集:我的C语言进阶合集,期待你的点击!!!🌈🌈

文章目录

  • 系列文章目录
  • 前言
  • 一、结构体的定义
  • 二、结构体的语法
    • (2.1)定义结构体类型
    • (2.2)声明结构体变量
    • (2.3)初始化结构体变量
  • 三、结构体的使用
  • 四、注意事项
  • 五、代码展示
  • 总结
  • END


前言

大家好,今天我来给各位分享C语言中自定义类型——结构体(struct)
结构体允许我们将多个不同类型的数据组合成一个单一的数据类型,从而可以更方便地管理和操作这些数据。
我将从其定义、语法、使用,注意事项,最后用代码来展示结构体的具体使用。


一、结构体的定义

结构体是C语言中的一种用户自定义的数据类型,
它允许我们将不同类型的数据项组合在一起,形成一个复合数据类型。

二、结构体的语法

(2.1)定义结构体类型

struct 结构体名称 
{数据类型 成员变量1;数据类型 成员变量2;...数据类型 成员变量N;
};
  • 例如,定义一个表示学生信息的结构体类型:
struct Stu
{char name[20];int age;
};

(2.2)声明结构体变量

  • 在定义了结构体类型之后,我们可以声明该类型的变量。

单独声明:

struct Stu stu1;
struct Stu stu2;

在定义时直接声明:

struct Stu 
{char name[20];int age;
} stu1, stu2;

(2.3)初始化结构体变量

可以通过直接赋值或使用指定初始化器进行初始化。

直接赋值:

struct Stu stu1 = {"Alice", 20};

或者使用C99标准中的指定初始化器:

struct Stu stu1 = { .name = "Alice", .age = 20 };

三、结构体的使用

自定义类型结构体变量可以通过点操作符(.)来访问其成员。

#include <stdio.h>struct Stu 
{char name[20];int age;
};int main() 
{struct Stu stu1 = { "Alice", 20};// 访问和打印结构体成员printf("Name: %s\n", stu1.name);printf("Age: %d\n", stu1.age);return 0;
}

输出结果展示:

四、注意事项

1、结构体类型的命名:通常使用大写字母开头的驼峰命名法(如Stu)来命名结构体类型,以区分普通变量类型。

2、结构体变量的作用域:与普通变量一样,结构体变量的作用域由其声明位置决定。

3、内存对齐:编译器可能会为了优化访问速度而对结构体成员进行内存对齐,这可能会导致结构体实际占用的内存比成员变量总和大。

4、嵌套结构体:一个结构体可以包含另一个结构体作为成员。

  • 如:
struct Addr 
{char street[20];char city[20];
};struct Stu
{char name[20];int age;struct Addr addr;
};

5、结构体指针:可以通过指针来访问结构体成员,这在处理大型结构体或动态分配内存时非常有用

struct Stu* ps = &stu1;
printf("Name: %s\n", ps->name);

五、代码展示

代码示例:

  • 以下是一个完整的示例程序,展示了如何定义结构体、声明结构体变量、初始化结构体以及通过结构体指针访问成员。
#include <stdio.h>// 定义一个存储地址的结构体
struct Addr 
{char street[20];// 存储街道名称char city[20];	// 存储城市名称
};// 定义一个存储学生信息的结构体
struct Stu 
{char name[20];	 // 存储学生姓名int age;	  	 // 存储学生年龄struct Addr addr;// 嵌套的地址结构体
};int main() 
{// 初始化结构体变量 stu1// 初始化时也初始化嵌套的 addr结构体struct Stu stu1 = { "Alice", 20, {"1haoStreet", "beijing"} };// 访问和打印结构体 stu1 的成员 printf("Name:%s\n", stu1.name);				// 打印学生姓名printf("Age:%d\n", stu1.age);				// 打印学生年龄printf("street:%s\n", stu1.addr.street);	// 打印学生地址的街道printf("city:%s\n", stu1.addr.city);		// 打印学生地址的城市// 打印分隔线printf("----------------------------------------------------\n");// 使用结构体指针访问和打印成员struct Stu* ps = &stu1;					// 创建指向 stu1 的指针 psprintf("Name:%s\n", ps->name);			// 使用指针访问并打印学生姓名printf("Age:%d\n", ps->age);			// 使用指针访问并打印学生年龄printf("street:%s\n", ps->addr.street );// 使用指针访问并打印学生地址的街道printf("city:%s\n", ps->addr.city );	// 使用指针访问并打印学生地址的城市return 0;
}

输出结果展示:


总结

通过以上分享和示例,相信大家对C语言中的结构体有了更深入的理解。
结构体是C语言中非常强大和灵活的一种数据类型,能够帮助我们更好地组织和管理数据。

END

每天都在学习的路上!
On The Way Of Learning

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

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

相关文章

学习ASP.NET Core的身份认证(基于Session的身份认证1)

ASP.NET Core使用Session也可以实现身份认证&#xff0c;关于Session的介绍请见参考文献5。基于Session的身份认证大致原理就是用户验证成功后将用户信息保存到Session中&#xff0c;然后在其它控制器中从Session中获取用户信息&#xff0c;用户退出时清空Session数据。百度基于…

题目 3209: 蓝桥杯2024年第十五届省赛真题-好数

一个整数如果按从低位到高位的顺序&#xff0c;奇数位&#xff08;个位、百位、万位 &#xff09;上的数字是奇数&#xff0c;偶数位&#xff08;十位、千位、十万位 &#xff09;上的数字是偶数&#xff0c;我们就称之为“好数”。给定一个正整数 N&#xff0c;请计算从…

人工智能如何改变你的生活?

在我们所处的这个快节奏的世界里&#xff0c;科技融入日常生活已然成为司空见惯的事&#xff0c;并且切实成为了我们生活的一部分。在这场科技变革中&#xff0c;最具变革性的角色之一便是人工智能&#xff08;AI&#xff09;。从我们清晨醒来直至夜晚入睡&#xff0c;人工智能…

MATLAB - ROS2 ros2genmsg 生成自定义消息(msg/srv...)

系列文章目录 前言 语法 ros2genmsg(folderpath)ros2genmsg(folderpath,NameValue) 一、说明 ros2genmsg(folderpath) 通过读取指定文件夹路径下的 ROS 2 自定义信息和服务定义来生成 ROS 2 自定义信息。函数文件夹必须包含一个或多个 ROS 2 软件包。这些软件包包含 .msg 文件…

LeetCode:19.删除链表倒数第N个节点

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;19.删除链表倒数第N个节点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表…

探索光耦:光耦安全标准解读——确保设备隔离与安全的重要规范

在现代科技日新月异的今天&#xff0c;光耦&#xff08;光电耦合器&#xff09;作为电子设备中不可或缺的隔离元件&#xff0c;其重要性不言而喻。它不仅在电源调控、工业自动化及医疗设备等关键领域大显身手&#xff0c;更是确保系统电气隔离与运行稳定的守护神。特别是在保障…

ubuntu+ROS推视频流至网络

目录 概述 工具 ros_rtsp 接受流 web_video_server 源码安装 二进制安装 ros接收rtsp视频流 总结 概述 ros_rtsp功能包可以将ros视频流以rtsp形式推送 web_video_server功能包可以将ros视频话题推HTTP流 rocon_rtsp_camera_relay可以接受同一网段下的rtsp视频流输出为…

如何在Python中进行数学建模?

数学建模是数据科学中使用的强大工具&#xff0c;通过数学方程和算法来表示真实世界的系统和现象。Python拥有丰富的库生态系统&#xff0c;为开发和实现数学模型提供了一个很好的平台。本文将指导您完成Python中的数学建模过程&#xff0c;重点关注数据科学中的应用。 数学建…

Hbase2.2.7集群部署

环境说明 准备三台服务器&#xff0c;分别为&#xff1a;bigdata141&#xff08;作为Hbase主节点&#xff09;、bigdata142、bigdata143确保hadoop和zookeeper集群都先启动好我这边的hadoop版本为3.2.0&#xff0c;zookeeper版本为3.5.8 下载安装包 下载链接&#xff1a;In…

【mac】终端左边太长处理,自定义显示名称(terminal路径显示特别长)

1、打开终端 2、步骤 &#xff08;1&#xff09;修改~/.zshrc文件 nano ~/.zshrc&#xff08;2&#xff09;添加或修改PS1&#xff0c;我是自定义了名字为“macminiPro” export PS1"macminiPro$ "&#xff08;3&#xff09;使用 nano: Ctrl o &#xff08;字母…

(长期更新)《零基础入门 ArcGIS(ArcMap) 》实验二----网络分析(超超超详细!!!)

相信实验一大家已经完成了&#xff0c;对Arcgis已进一步熟悉了&#xff0c;现在开启第二个实验 ArcMap实验--网络分析 目录 ArcMap实验--网络分析 1.1 网络分析介绍 1.2 实验内容及目的 1.2.1 实验内容 1.2.2 实验目的 2.2 实验方案 2.3 实验流程 2.3.1 实验准备 2.3.2 空间校正…

云技术-docker

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团…

如何保护LabVIEW程序免遭反编译

在正常情况下&#xff0c;LabVIEW程序&#xff08;即编译后的可执行文件或运行时文件&#xff0c;如 .exe 或 .llb&#xff09;无法直接被反编译出源码。然而&#xff0c;有一些需要特别注意的点&#xff1a; 1. LabVIEW的编译机制 LabVIEW编译器会将源码&#xff08;.vi文件&a…

C++自动化测试:GTest 与 GitLab CI/CD 的完美融合

在现代软件开发中&#xff0c;自动化测试是保证代码质量和稳定性的关键手段。对于C项目而言&#xff0c;自动化测试尤为重要&#xff0c;它能有效捕捉代码中的潜在缺陷&#xff0c;提高代码的可维护性和可靠性。本文将重点介绍如何在C项目中结合使用Google Test&#xff08;GTe…

速度革命:esbuild如何改变前端构建游戏 (1)

什么是 esbuild&#xff1f; esbuild 是一款基于 Go 语言开发的 JavaScript 构建打包工具&#xff0c;以其卓越的性能著称。相比传统的构建工具&#xff08;如 Webpack&#xff09;&#xff0c;esbuild 在打包速度上有着显著的优势&#xff0c;能够将打包速度提升 10 到 100 倍…

【逐行注释】自适应观测协方差R的AUKF(自适应无迹卡尔曼滤波,MATLAB语言编写),附下载链接

文章目录 自适应R的UKF逐行注释的说明运行结果部分代码各模块解释 自适应R的UKF 自适应无迹卡尔曼滤波&#xff08;Adaptive Unscented Kalman Filter&#xff0c;AUKF&#xff09;是一种用于状态估计的滤波算法。它是基于无迹卡尔曼滤波&#xff08;Unscented Kalman Filter&…

实现 Browser 客户端下载 XML 文件功能

后端 使用 io.BytesIO 方法 创建一个字节缓冲区在不需要磁盘文件的情况下进行文件操作打包为 zip 压缩包&#xff08;上图代码&#xff09;in_memory_zip.seek(0) 数据写入ZIP后文件指针会停留在缓冲区的末尾将文件指针重置回开头make_response() 方法用于创建HTTP响应的函数.g…

几个bev模型部署常用的命令

#bevformer 相比bevfusion多了canbus&#xff08;因为引入了时序注意力机制&#xff09; ##迷你版数据集 python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --version v1.0-mini ##标准版 python tools/crea…

大数据新视界 -- Hive 数据分区:精细化管理的艺术与实践(上)(7/ 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

web博客系统的自动化测试

目录 前言测试用例编写自动化脚本测试准备博客登录页相关测试用例登陆成功登录失败 博客首页相关测试用例登陆成功登录失败 博客详情页相关测试用例登录成功登录失败 博客编辑页相关测试用例登陆成功登录失败 编写测试文档测试类型内容 前言 本次测试是运用个人写的一个博客系…