news 2026/10/11 4:26:13

初识结构体(新手友好)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
初识结构体(新手友好)

今天写排结构体的顺序的函数时,发现对结构体的理解似乎有些遗忘,所以我赶紧冲进CSDN写一篇复习类博客,复习的同时也是进一步加深理解,希望也对你有帮助。

我将讨论一下问题:

①为什么要定义结构体这种变量类型?
②结构体如何声明?(格式)
③怎样用结构体定义变量?(局部、全局)
④怎样实现初始化?
1)按顺序初始化
2)不按顺序初始化
3) 结构体嵌套结构体时的初始化
⑤如何辨析结构体类型的名字和用结构体类型定义的变量的名字的区别?
⑥结构体成员访问操作符
1)直接访问操作符
2)间接访问操作符

一.为什么要定义结构体这种变量类型?

常说写代码是用于解决日常生活中的问题,描述问题中的数据有很多类型,比如整型、浮点型或是字符型等等,但一些情况下,单单用一类数据类型似乎不太够,比如想描述一个学生的基本信息,这时就可能包括姓名(字符型数组)、年龄(整型)、身高(浮点型)和学号(字符型数组)等等,这时就可以自定义一种可以同时包含我们想要的各种类型的数据类型——结构体类型。

自定义结构体时,成员变量可以是不同类型的变量,如:标量、数组、指针、甚至是其他结构体。

二.结构体的声明

struct student //student 是你自定义的这种结构体的名字 { char name[20]; int age; float height; int ID; //花括号里一行一行组成的排列的叫做成员列表,而每一行都是一个成员变量 };

struct 结构体名字

{

你想包括的变量类型

};//不要忘记写分号!

三.怎样用结构体定义变量(局部、全局)

1)局部结构体变量的定义
struct student { char name[20]; int age; float height; char ID; }; int main() { struct s1; //放在main函数里,是局部变量 }
2)全局结构体变量的定义
struct student { char name[20]; int age; float height; char ID; }s2; //①直接在第二个花括号后和分号前放变量名就是全局变量 struct student s3 ; //②在main函数外定义变量是全局变量 int main() { return 0; }

四.怎样实现初始化?

按、不按顺序定义结构体时的成员列表的顺序初始化
struct student { char name[20]; int age; float height; char ID; }; int main() { //初始化 //按顺序初始化 struct s4 = {"张三" , 18 , 188.8f ,"121011122200" }; //不按顺序初始化 struct s5 = {.ID="121011122200", .height=188.8f, .name="张三", .age=18}; return 0; }

不按顺序初始化,按我的初步理解,只能说要用".成员变量=的方式来初始化"。

结构体嵌套结构体时的初始化
struct stu1 { char name[20]; int age; float height; char ID[20]; }; struct stu2 { struct stu1 s1; int* p1; }; //嵌套初始化 struct stu2 s2 ={ {"李四", 20 , 188.8f , "121011220012" } , NULL }; //struct stu1 s1; ————{"李四", 20 , 188.8f , "121011220012" } //int* p1; ———— NULL

比较好理解,初始化结构体变量需要使用{ },那么当结构体的成员变量中出现另外的结构体时,不就是在{ } 中再加一个{ } 吗?

五.如何辨析结构体类型的名字和用结构体类型定义的变量的名字的区别?

为了便于理解,我们以int a;来类比一下。

struct stu2 中的stu2是结构体类型的名字,相当于 int a ;中的int,想一下如果没有给整型取名为int,那我们同样也要给整型这种类型取一个自定义的名字,而在结构体中,stu2就是我们给结构体类型取的名字,道理是一样的。并且声明结构体的过程就像是剖析int类型的过程,只不过int可以直接用,而结构体需要自定义。

struct stu1 s1 中的s1 是结构体变量名,相当于 int a ;中的a ,仅仅只是声明结构体计算机不会分配内存,只有定义了结构体变量,才会分配内存。

插点题外话,我曾经看到过一个比方,"类型+变量=某某"的定义方式可以理解成有一个贴有标签的杯子装了水,标签就是杯子的类型,我只说杯子的类型,你是没法使用这个杯子的,但当我给你一个杯子后(变量),你就可以装水了,而装水的过程就是初始化或者赋值过程。

六.结构体成员访问操作符

1)直接访问操作符 .

使用方式:结构体变量.成员名

#include<stdio.h> struct stu1 { char name[20]; int age; float height; char ID[20]; }; struct stu1 s1={"black", 18 , 168.5 , "121025052017" }; int main() { printf("%s", s1.ID ); return 0; }

s1——结构体变量名(注意!是结构体变量名!不是结构体类型名!)

. ——结构体成员直接访问符

ID ——结构体成员变量名

如果遇到结构体嵌套结构体时也不用慌:

#include<stdio.h> struct stu1 { char name[20]; int age; float height; char ID[20]; }; struct stu2 { int* p; struct stu1 s1; }; struct stu2 s2={ NULL ,{"black", 18 , 168.5 , "121025052017" } }; int main() { printf("%s", s2.s1.ID ); return 0; }

像剥洋葱一样,一层层向里深入,从外层的结构体变量s2到内层的结构体变量s1最后再到内层结构体里的成员变量ID,所以是s2.s1.ID。

2)间接访问操作符 ->

使用方式:结构体指针->成员变量名

#include<stdio.h> struct stu1 { char name[20]; int age; float height; char ID[20]; }; int main() { struct stu1 s1={"black", 18 , 168.5 , "121025052017" } ; struct stu1 *p = &s1; printf("%s", p->ID ); return 0; }

由于本人现在学习有限,这篇博客只能算初识结构体,后续随着学习的深入,我会补充更新的内容与理解,感谢观看。

新手小白学习编程的第57天,如有错误,欢迎指出,我会积极改正!

——end——

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/9 12:44:02

列车售票|基于springboot 列车售票系统(源码+数据库+文档)

列车售票目录 基于springboot vue列车售票系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue列车售票系统 一、前言 博主介绍&#xff1a;✌️大厂…

作者头像 李华
网站建设 2026/10/10 11:33:31

AI驱动的手动测试变革:赋能而非替代

随着大语言模型和智能自动化技术的飞速发展&#xff0c;软件测试领域正迎来前所未有的变革浪潮。传统手动测试作为软件质量保障的基石&#xff0c;面临着效率提升与价值重塑的双重挑战。 AI时代手动测试的困境与机遇 传统手动测试的局限性 手动测试长期面临着测试覆盖率低、…

作者头像 李华
网站建设 2026/10/10 15:11:38

【奶茶Beta专项】【LVGL9.4源码分析】09-core-group

【奶茶Beta专项】【LVGL9.4源码分析】09-core-group焦点组管理1 概述1.1 文档目的1.2 代码版本与范围2 设计意图与总体定位2.1 为什么需要 lv_group2.2 lv_group 在架构中的位置2.3 与全局输入/焦点状态的关系3 使用方式与典型 DEMO3.1 创建 group 并绑定编码器输入3.2 在菜单/…

作者头像 李华
网站建设 2026/10/11 4:20:33

网络安全异想天开(不定期更新)

1.使用AI大数据技术处理安全问题。2.有福同享有难同当&#xff1a;你发什么&#xff0c;我返回你发的&#xff0c;你拒绝我也拒绝。3.没有隐私可言&#xff1a;软件协议&#xff0c;隐私条款和设置&#xff0c;早就泄露了。4.高考屏蔽信号也是一种安全手段。5.手机验证码的安全…

作者头像 李华
网站建设 2026/10/11 4:45:45

《CAPL脚本实现CANOE工具 Bus-Off自动恢复(含重试机制)》

目录 1.创建CAPL文件 3.编辑CAPL文件 4.CAPL文件功能描述 4.执行CAPL文件结果 1.创建CAPL文件 选择"Insert Network Node" 点击编辑按钮 ->输入CAPL文件的名称->点击打开 ->自动生成一个空的CAPL文件 3.编辑CAPL文件 这边的CANOE软件版本为16 /*!En…

作者头像 李华
网站建设 2026/10/11 0:47:17

力扣1965-丢失信息的雇员

表: Employees---------------------- | Column Name | Type | ---------------------- | employee_id | int | | name | varchar | ---------------------- employee_id 是该表中具有唯一值的列。 每一行表示雇员的 id 和他的姓名。表: Salaries---------------…

作者头像 李华