news 2026/7/1 22:50:54

初识结构体(新手友好)

作者头像

张小明

前端开发工程师

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/6/29 12:27:03

【Hadoop+Spark+python毕设】物联网网络安全威胁数据分析系统、计算机毕业设计、包括数据爬取、数据分析、数据可视化、Hadoop、实战教学

&#x1f393; 作者&#xff1a;计算机毕设小月哥 | 软件开发专家 &#x1f5a5;️ 简介&#xff1a;8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 &#x1f6e0;️ 专业服务 &#x1f6e0;️ 需求定制化开发源码提…

作者头像 李华
网站建设 2026/6/30 19:56:55

Springboot连锁药店进销存业务系统98i85(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表项目功能&#xff1a;员工,供应商,药品信息,药品采购,进货出库,药品销售,退货入库,药品报损,药品销毁开题报告内容基于SpringBoot的连锁药店进销存业务系统开题报告一、选题背景与意义1.1 行业现状与痛点随着医疗行业的快速发展和人们对健康需求的日益增加&…

作者头像 李华
网站建设 2026/7/1 6:51:19

智能测试指标动态权重分配研究

随着人工智能与机器学习技术在软件测试领域的深度渗透&#xff0c;传统静态权重分配模式已难以适应瞬息万变的测试环境。本文基于2025年行业实践数据&#xff0c;提出以动态权重分配为核心的新型测试评估体系&#xff0c;通过构建具备自适应能力的指标权重矩阵&#xff0c;有效…

作者头像 李华
网站建设 2026/6/30 21:19:14

std::promise 重难点

std::promise 重难点全拆解 std::promise 是 C11 异步编程的核心组件&#xff0c;但其难点不在于语法本身&#xff0c;而在于状态管理、生命周期控制、异常传递等“隐性规则”——踩中任何一个都可能导致程序崩溃或逻辑异常。本文用“专业底层逻辑通俗比喻分步实操”的方式&…

作者头像 李华