news 2026/1/26 2:32:36

初识结构体(新手友好)

作者头像

张小明

前端开发工程师

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/1/17 21:23:03

本地部署DeepSeek

ollama终端的方式部署参考&#xff1a;ollama本地部署 智谱API Key获取 LM Studio 它是模型的托管平台&#xff0c;可以把模型加载后&#xff0c;作为服务器向外提供服务器&#xff0c;本身也具有简单的对话框可以聊天。 &#xff1a;https://lmstudio.ai/ 在左下角改为开发者…

作者头像 李华
网站建设 2026/1/24 18:06:28

JavaWeb企业级开发---JavaScript

记录在听黑马课的时候的笔记以及课堂上练习的代码&#xff0c;文章图源于我在听课的时候所截的屏&#xff0c;所以有些不清晰&#xff0c;请见谅。下面是课程链接&#xff0c;可点击自行跳转。 【黑马程序员JavaWeb开发教程&#xff0c;实现javaweb企业开发全流程&#xff08;…

作者头像 李华
网站建设 2026/1/20 4:25:38

微信小程序_WXML

图片&#xff1a;等比例填充&#xff08;头像&#xff09;&#xff1a;mode“aspectFill”<image src"{{userInfo ? userInfo.avatarUrl :/images/1.png}}" mode"aspectFill"></image>

作者头像 李华
网站建设 2025/12/14 20:30:49

Springboot连锁家政保洁管理系统03zmn(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表项目功能&#xff1a;分店管理员,用户,保洁员,通知信息,独立服务,团队服务,独立服务信息,团队服务信息,独立服务订单,团队服务订单,团队派单,完成订单,独立服务取消,团队服务取消开题报告内容基于SpringBoot的连锁家政保洁管理系统开题报告一、研究背景与意义研…

作者头像 李华
网站建设 2025/12/14 20:29:15

Redis原理篇-Dict的rehash

** 不管是扩容还是收缩&#xff0c;必定会创建新的哈希表&#xff0c;导致哈希表的size和sizemask变化&#xff0c;而key的查询与sizemask有关。因此必须对哈希表中的每一个key重新计算索引&#xff0c;插入新的哈希表&#xff0c;这个过程称为rehash。过程是这样的&#xff1a…

作者头像 李华
网站建设 2026/1/9 0:07:33

计算机考研408【计算机网络】核心知识点总结

计算机网络作为考研408的重要组成部分&#xff0c;占总分约25分&#xff0c;由选择题和综合应用题构成。掌握计算机网络的基本概念、原理和方法是备考的关键 &#xff0c;尤其要理解OSI参考模型与TCP/IP模型的对应关系&#xff0c;以及各层协议的工作原理。本文将系统梳理计算机…

作者头像 李华