C语言基础语法之结构体

您所在的位置:网站首页 三星智能生活助手 C语言基础语法之结构体

C语言基础语法之结构体

#C语言基础语法之结构体| 来源: 网络整理| 查看: 265

C语言中的数组只能允许程序员定义存储相同类型数据。但是结构是C语言编程中允许您存储不同数据类型的数据。

结构体的定义

要想定义结构,必须用到struct关键字,struct的语句格式:

在struct 中声明了一个含有若干新成员的数据类型。

tag是结构体标签。

member-list是标准的变量定义,比如 int i; 或者 float f,或者其他有效的变量定义。

variable-list结构变量,定义在结构的末尾,最后一个分号之前,您可以指定一个或多个结构变量。下面是声明 Book 结构的方式:

在一般情况下,tag、member-list、variable-list这 3 部分至少要出现 2 个。以下为实例:

在上面的声明中,第一个和第二声明被编译器当作两个完全不同的类型,即使他们的成员列表是一样的,如果令 t3=&s1,则是非法的。

结构体的成员可以包含其他结构体,也可以包含指向自己结构体类型的指针,而通常这种指针的应用是为了实现一些更高级的数据结构如链表和树等。

如果两个结构体互相包含,则需要对其中一个结构体进行不完整声明,如下所示:

结构体变量的初始化

和其它类型变量一样,对结构体变量可以在定义时指定初始值。

执行输出结果为:

title : C 语言author: RUNOOB subject:编程语言book_id:123456

访问结构成员

为了访问结构的成员,我们使用成员访问运算符(.)。成员访问运算符是结构变量名称和我们要访问的结构成员之间的一个句号。您可以使用struct关键字来定义结构类型的变量。下面的实例演示了结构的用法:

当上面的代码被编译和执行时,它会产生下列结果:

结构作为函数参数

您可以把结构作为函数参数,传参方式与其他类型的变量或指针类似。您可以使用上面实例中的方式来访问结构变量:

当上面的代码被编译和执行时,它会产生下列结果:

指向结构的指针

您可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似,如下所示:

structBooks*struct_pointer;

现在,您可以在上述定义的指针变量中存储结构变量的地址。为了查找结构变量的地址,请把 & 运算符放在结构名称的前面,如下所示:

struct_pointer =&Book1;

为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符,如下所示:

struct_pointer->title;

让我们使用结构指针来重写上面的实例,这将有助于您理解结构指针的概念:

当上面的代码被编译和执行时,它会产生下列结果:

C语言 C语言 +关注

关注

165

文章

5906

浏览量

111141 结构体 结构体 +关注

关注

1

文章

33

浏览量

9648

原文标题:C语言中的结构体

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

扫一扫,分享给好友

复制链接分享 评论

发布评论请先 登录

相关推荐

C语言的具体结构与基本数据类型 简单来说,一个C程序就是由若干头文件和函数组成。 的头像 STM32嵌入式开发 发表于 06-22 15:35 • 117次 阅读 安富莱C语言编码规范 以下提供两种命名方式以供参考:(1)各程序模块的文件命名开头 2 个小写字母代表本模块的功能:如:主.... 的头像 硬件攻城狮 发表于 06-22 14:38 • 48次 阅读 fastcxml xml解析库 ./oschina_soft/gitee-fastxml.zip 发表于 06-22 10:31 • 3次 阅读 fastcxml xml解析库 C语言的面向接口编程 其实bug菌这么多年开发过来,真正把C完完全全用面向对象的方式进行编写是非常少的,像C++中的继承、.... 的头像 FPGA之家 发表于 06-22 09:37 • 70次 阅读 AWTK-MVVM C语言MVVM框架 ./oschina_soft/gitee-awtk-mvvm.zip 发表于 06-21 11:33 • 3次 阅读 AWTK-MVVM C语言MVVM框架 开源软件-Libcsp高性能C语言并发库 ./oschina_soft/libcsp.zip 发表于 06-21 10:35 • 3次 阅读 开源软件-Libcsp高性能C语言并发库 如何利用C语言去调用rust静态库呢 引言 工作中的嵌入式项目,基本都是C语言。 一直想在项目中引入一个略高级的语言,来填补C语言的一些不足。 之前有用过Mic... 发表于 06-21 10:27 • 796次 阅读 在rust中调用C语言并实现字符串打印 上篇实现了C调用rust。 此篇计划实现在rust中调用c,并实现字符串打印。 更新lib.rs extern "C" { fn test_putcha... 发表于 06-21 10:20 • 749次 阅读 LIB-ZO C语言协程库 ./oschina_soft/gitee-lib-zo.zip 发表于 06-21 10:05 • 3次 阅读 LIB-ZO C语言协程库 libspng PNG图片读写库 ./oschina_soft/libspng.zip 发表于 06-21 09:41 • 3次 阅读 libspng PNG图片读写库 C语言和C++到底是什么关系 首先C++和C语言本来就是两种不同的编程语言,但C++确实是对C语言的扩充和延伸,并且对C语言提供后.... 的头像 一口Linux 发表于 06-20 11:28 • 105次 阅读 如何解决并发 C 应用程序中的多线程问题 本文描述如何使用 C 编程语言和标准 POSIX 线程。 使用互斥锁和信号量管理并发访问 如前所述,并发写入操作可能会导致... 发表于 06-20 09:58 • 2268次 阅读 如何解决并发 C 应用程序中的多线程问题 嵌入式软件设计模式 好文值得收藏 本文引用自本人公众号文章: 嵌入式开发中的两点编程思想   C语言也很讲究设计模式?一文讲透   包.... 的头像 lucky的记录与分享 发表于 06-20 09:09 • 170次 阅读 C语言实现txt文本读取与修改 #include #include #include int main(){FILE *fp = f.... 的头像 嵌入式应用开发 发表于 06-17 17:06 • 464次 阅读 C语言实现txt文本读取与修改 c语言实现一元线性回归 第一:用所给样本求出两个相关变量的(算术)平均值 第二:分别计算分子和分母:(两个公式任选其一)分子.... 的头像 嵌入式应用开发 发表于 06-17 16:16 • 324次 阅读 c语言实现一元线性回归 C语言怎么跳出while函数 在C语言中while函数是经常用到的,这里说一下可以跳出while函数的几种方法。 的头像 嵌入式应用开发 发表于 06-17 15:40 • 183次 阅读 C语言怎么跳出while函数 cpufetch CPU信息获取命令行工具 ./oschina_soft/cpufetch.zip 发表于 06-17 15:02 • 16次 阅读 cpufetch CPU信息获取命令行工具 怎样用C语言去启动SOC验证环境呢 上次说到CPU的boot,今天说说SOC环境的另外一种启动方式。用C启动SOC验证环境有几个问题。 一是CPU boot过程比较慢... 发表于 06-17 14:41 • 630次 阅读 SameBoy开源的Game Boy模拟器 ./oschina_soft/SameBoy.zip 发表于 06-17 11:28 • 5次 阅读 SameBoy开源的Game Boy模拟器 cwb C语言网络框架 ./oschina_soft/gitee-cwb.zip 发表于 06-17 10:20 • 12次 阅读 cwb C语言网络框架 ccls C/C++/ObjC语言服务器 ./oschina_soft/ccls.zip 发表于 06-17 09:32 • 11次 阅读 ccls C/C++/ObjC语言服务器 C语言如何注释以及在哪儿注释 文件注释描述了该文件的内容,如果一个文件只声明,或实现,或测试了一个对象,并且这个对象已经在它的声明.... 的头像 strongerHuang 发表于 06-17 09:22 • 138次 阅读 C语言指针相关的概念、语法及使用场景 如果问C语言中最重要、威力最大的概念是什么,答案必将是指针!威力大,意味着使用方便、高效,同时也意味.... 的头像 硬件攻城狮 发表于 06-16 15:59 • 302次 阅读 怎样去设计ARM Linux系统下的c语言程序呢 正所谓:工欲善其事必先利其器 开发环境ip地址配置如下:windows工作主机地址为:192.168.1.101 linux宿主机 eth0 ip地址为19... 发表于 06-16 14:48 • 498次 阅读 常用优化编译选项对ARM平台的影响 我们知道在C语言编译时,有那么几个常用的优化编译选项,分别是-O0,-O1,-O2,-O3以及-Os。之前一直觉得既然是优化选项,顶多... 发表于 06-16 14:38 • 436次 阅读 Cmark C版本Markdown解析器 ./oschina_soft/cmark.zip 发表于 06-16 14:24 • 8次 阅读 Cmark C版本Markdown解析器 Littlewolf C语言编写的图形引擎 ./oschina_soft/littlewolf.zip 发表于 06-16 14:23 • 7次 阅读 Littlewolf C语言编写的图形引擎 MiniLisp Lisp解释器 ./oschina_soft/minilisp.zip 发表于 06-16 11:57 • 3次 阅读 MiniLisp Lisp解释器 MuJoCo多关节动力学物理引擎 ./oschina_soft/mujoco.zip 发表于 06-16 10:56 • 11次 阅读 MuJoCo多关节动力学物理引擎 space-shooter.c 2D太空射击游戏 ./oschina_soft/space-shooter.c.zip 发表于 06-16 10:31 • 3次 阅读 space-shooter.c 2D太空射击游戏 Arb任意精度区间算法C库 ./oschina_soft/arb.zip 发表于 06-16 10:25 • 8次 阅读 Arb任意精度区间算法C库 Notcurses丰富的字符图形/TUI库 ./oschina_soft/notcurses.zip 发表于 06-16 09:17 • 5次 阅读 Notcurses丰富的字符图形/TUI库 在标准C语言中编译出来的可执行程序 在标准C语言中,编译出来的可执行程序分为代码区(text)、数据区(data)和未初始化数据区(bs.... 的头像 嵌入式应用开发 发表于 06-16 09:01 • 221次 阅读 在标准C语言中编译出来的可执行程序 Open Golf跨平台迷你高尔夫游戏 ./oschina_soft/Open-Golf.zip 发表于 06-15 09:24 • 10次 阅读 Open Golf跨平台迷你高尔夫游戏 MCU说明书说有CH549的c语言,但是评估板例程包里没有,求大神帮忙 MCU说明书说有CH549的c语言,但是评估板例程包里没有,请版主帮忙找一下,谢谢      ... 发表于 06-15 06:01 • 50次 阅读 如何通过Linux系统的Shell用户访问操作系统内核服务 1、Linux Shell编程介绍Shell 是一个用 C 语言编写的程序,通过 Shell 用户可以访问操作系统内核服务。Shell 既是一种命令... 发表于 06-14 16:50 • 3019次 阅读 Streamly具有C语言性能的Idiomatic Haskell ./oschina_soft/streamly.zip 发表于 06-13 11:23 • 13次 阅读 Streamly具有C语言性能的Idiomatic Haskell 嵌入式软件常见笔试面试题汇总 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) 的头像 lucky的记录与分享 发表于 06-13 07:54 • 238次 阅读 基于51单片机的OLED显示图片文字 基于51单片机的OLED屏幕显示,可显示图片文字字母等。 的头像 王子变青蛙_35400519 发表于 06-12 00:43 • 1576次 阅读 基于51单片机的OLED显示图片文字 如何提升C编程能力 GNU C:GNU的C函数库,其实就是glibc,它是Linux上最重要的函数库,它定义了 ANSI.... 的头像 FPGA之家 发表于 06-09 10:24 • 235次 阅读 c语言读写表格(csv)文件 读取csv文件示例 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符.... 的头像 嵌入式技术 发表于 06-08 09:22 • 565次 阅读 c语言读写表格(csv)文件  读取csv文件示例 linux基础和C语言学习总结 学习已经近两个月了,不能说所教知识都掌握得非常好,但至少还是能跟着老师步伐、理解关键知识点、正确完成作业的。现在还没真正... 发表于 06-07 14:48 • 320次 阅读 Chafa命令行图像转换器和查看器 ./oschina_soft/chafa.zip 发表于 06-07 14:34 • 18次 阅读 Chafa命令行图像转换器和查看器 Zauonlok Renderer基于C语言的软件渲染器 ./oschina_soft/renderer.zip 发表于 06-07 14:29 • 15次 阅读 Zauonlok Renderer基于C语言的软件渲染器 整型的signed和unsigned详解 double的二进制位显示 C语言各种数据类型的内存映像(32位平台) 的头像 一口Linux 发表于 06-06 17:01 • 368次 阅读 详细普中51单片机开发功略 到目前为止,在电子界,如果想进入微控制器领域的学习,相信绝大多数的 人会认为要从 51 单片机开始.... 发表于 06-06 14:32 • 37次 阅读 AWStudio社区版重大升级 支持高中低端全平台运行 今天我们迎来了AWStudio社区版的重大升级。AWStudio v1.1支持从云端获取自定义控件、.... 的头像 科技绿洲 发表于 06-06 11:55 • 301次 阅读 AWStudio社区版重大升级 支持高中低端全平台运行 怎么使用C语言控制硬件 C语言的应用编程在单片机的领域占了很大一部分,使用的比较多的51单片机和STM32单片机都可以使用M.... 的头像 要长高 发表于 06-04 17:31 • 400次 阅读 如何将高级C语言编译成机器码 C编译成机器码要通过预处理,编译,汇编,链接四个步骤。这四个步骤由谁做的呢?答案是编译器。 编译器做的工作类似我们IC行... 发表于 06-01 16:53 • 2692次 阅读 zimg图像存储和处理系统 ./oschina_soft/zimg.zip 发表于 05-31 10:26 • 19次 阅读 zimg图像存储和处理系统 linux内核源码中的task_struct结构体 进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。.... 的头像 一口Linux 发表于 05-30 14:10 • 484次 阅读 Lilliput Discord开源的图像调整工具 ./oschina_soft/lilliput.zip 发表于 05-30 09:49 • 13次 阅读 Lilliput Discord开源的图像调整工具 ATPCS基本规则 有调用关系的所有子程序必须遵守同一种ATPCS,编译器或者汇编器在ELF格式的目标文件中设置相应的属.... 的头像 安芯教育科技 发表于 05-27 10:12 • 245次 阅读 JWebFileTrans(JDownload)从网络上下载文件的程序 ./oschina_soft/JDownload.zip 发表于 05-27 09:10 • 24次 阅读 JWebFileTrans(JDownload)从网络上下载文件的程序 详解回调函数的概念及使用步骤 回调函数就是一个被作为参数传递的函数。在C语言中,回调函数只能使用函数指针实现,在C++、Pytho.... 的头像 嵌入式应用开发 发表于 05-26 15:20 • 456次 阅读 Vitis HLS工具简介及设计流程 Vitis HLS 是一种高层次综合工具,支持将 C、C++ 和 OpenCL 函数硬连线到器件逻辑.... 的头像 Xilinx赛灵思官微 发表于 05-25 09:43 • 538次 阅读 基于non-OS和RT-Thread的按键库源码及应用 核心的按键扫描代码仅有三行,没错,就是经典的 三行按键扫描算法。使用 C 语言标准库 API 编写,.... 的头像 硬件攻城狮 发表于 05-23 09:39 • 497次 阅读 基于non-OS和RT-Thread的按键库源码及应用 C语言_二维数组与一维指针 字符串:本身属于字符数组、字符串结尾有’\0’。 的头像 DS小龙哥-嵌入式技术 发表于 05-21 09:11 • 554次 阅读 详解内存池技术的原理与实现 最近在网上看到了几篇篇讲述内存池技术的文章,有一篇是有IBM中国研发中心的人写的,写的不错~~文章地.... 的头像 Linux内核补给站 发表于 05-20 08:58 • 3743次 阅读 详解内存池技术的原理与实现 微控制器中各式各样的编程语言 在上一篇文章中,我们探索了微控制器中的软件与硬件,并分析了为何微控制器的软件和硬件相辅相成缺一不可。.... 的头像 东芝半导体 发表于 05-19 19:58 • 851次 阅读


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3