news 2026/9/6 16:00:47

初识结构体(新手友好)

作者头像

张小明

前端开发工程师

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/9/6 10:19:36

测试的“元认知”:智能体如何评估自身可靠性?

在软件测试领域&#xff0c;自动化与智能化正以前所未有的速度重塑工作流程。随着人工智能代理&#xff08;智能体&#xff09;广泛应用于测试用例生成、缺陷预测和持续集成&#xff0c;一个关键问题浮出水面&#xff1a;这些智能体如何像人类测试专家一样&#xff0c;对自身行…

作者头像 李华
网站建设 2026/9/6 5:11:41

本凡码农引领杭州小程序开发解决方案赋能企业创新与发展

本凡码农的杭州小程序开发解决方案为企业提供了一种高效的数字化转型工具。我们的目标是帮助品牌快速适应市场变化&#xff0c;提升用户体验。通过定制化的小程序&#xff0c;企业能够实现从线上到线下的无缝连接&#xff0c;简化业务流程&#xff0c;从而更好地满足用户需求。…

作者头像 李华
网站建设 2026/9/6 7:06:00

Windows11系统文件wer.dll丢失或损坏问题 下载修复

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/9/5 20:20:15

vue基于Spring Boot的公务员考试练习系统的应用和研究_1p390k6z

目录 具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;同时还支持java、ThinkPHP、Node.js、Spring…

作者头像 李华
网站建设 2026/9/5 13:35:56

测试机器人:下一代助手:AI如何重塑软件测试的未来

在软件测试领域&#xff0c;传统的手动测试和脚本化自动化测试正面临日益增长的复杂性和效率挑战。随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;下一代测试助手——智能测试机器人——正逐步从概念走向现实&#xff0c;为测试从业者带来革命性变革。 AI…

作者头像 李华