当前位置: 首页 > news >正文

结构体到底是什么呀?!

我们来思考一个问题,如果我们要保存一个年级所有学生的信息,我们该如何去做呢!我们稍微回忆下以前我学过的知识,大概能想到用数组去做,因为学号啊,姓名啊,成绩啊,都是同类元素的集合,当然用数组了,如果用单个变量真的会累死人呀!但是再进一步思考发觉,学生的信息还是有不少东西的,比如学号,姓名,各科成绩,电话,家庭住址,如果单单用数组,是不是得好多好多数组呀!而且这样呢,管理起来也非常不方便啊,那怎么办啊。其实呢!在高级语言中,有一种类型,就是对基本类型进行重定义。把多个数据类型重新定义成一个新类型。就好比一栋房子,里面有厕所啊,厨房,厨房里还有几颗白菜。如果我们想要表示你有一栋房子,你可以把房子里面的东西全部都说一遍,你还可以把这栋房子就用一栋房子去表示。厨房里的几颗白菜你可以想成放在数组里的,因为几颗白菜是同类元素。一栋房子就相当于我们现在要学习的结构体。各种类型集合成一起,呵呵,这样的话,你就可以用结构体去表示复杂的数据结构啦!

结构体成员变量的访问的思考

我们再思考一个问题,结构体是多种不同的数据类型的集合,所以每个元素的大小都是不一样的,那么如何访问结构体中的成员变量呢!要是数组的话就好办,因为是同类啊,就以前学习的数组寻址公式一下子就访问到了(很多人质疑那个寻址公式,这个质疑很正常,因为你还没有理解)。这确实是一个问题呀!不过,等会应该就会有答案的!

结构体的定义

结构体定义的关键字是 struct. 表示一个信息结构、后面跟着的是结构体的名称,你定义成一个新类型了,得起个名字呀!就好比,你现在造出了1个天使,天使由哪些构成呢,有天使的翅膀,还有像人一样的天使,还有白色的耀眼的裙子。还有天使的红色高跟鞋,还有,天使也许也有编号的吧,不只它1个天使,呵呵!还有天使的名字。现在我们先来造人,呵呵!等以后厉害了再造天使:

造人:

structPerson

{

charname[64];//定长的名字,如果这里给的类型是char * 就可以不定长了。但是用char *寻址要寻2次。用定长的话一次就到啦!

charsex;//性别

intage;//int的age 应该够啦。活得够大啦!

floatheight;

};

大家仔细回忆QQ的年龄设置,是不是每一年都得手动去改名字啊,QQ不会自动给你改。这样是不是不太好啊因为每年都要去改年龄!我们是不是应该分别定义年月日啊,每次用当前年月日减去它的初始年月日,这样的才好的啊,因为这样无论在哪1年都知道一个人多大了的啊。比如,现在我们做的学生信息管理系统,要是每年都去改年龄,是不是设计的不太科学啊,所以,我们这里要改1下,但是QQ比较是人才济济的,他们不会傻到这种地步啊,那么它们为什么那这样的做呢,我想主要是考虑到大量算的压力,因为几亿QQ使用者一上线就要请求服务器做下减法,呵呵,这样服务器压力就大啊,但是也可以放在客服端做的呀,那为什么腾讯没有这样做呢!不知道了,慢慢地,努力的学,有一天会知道的。

结构体和INT char其实是同一级别的

我们来看这个例子:

struct stStudent //st前缀是一种规则,你自己选择一种,一直保持就好。

char szName[64];
int nYear;
int nMonth;
int nDay;
};

注意1个问题啊!现在我们只是定义了一种数据类型,这里,我们还没有产生变量哦!它其实和int char 是一样的哦.只不过这里的结构体是一个符合类型。也就是这里没有分配内存的哦!比如我们来看下面的错误程序:

正确的做法是先要声明这种类型的变量,其实和int char声明变量是一样的。例如:

struct stStudent //st前缀是一种规则,你自己选择一种,一直保持就好。

char szName[64];
int nYear;
int nMonth;
int nDay;
float fScore[3];
};
int main()
{
stStudent.szName[0] = ‘J’;//这样是错误的哦,这里就好比 int = 123;相当于是对类型在赋值。
}

struct stStudent //st前缀是一种规则,你自己选择一种,一直保持就好。

char szName[64];
int nYear;
int nMonth;
int nDay;
float fScore[3];
};
int main()
{
stStudent stu;
stu.szName[0] = ‘J’;
}

结构体变量的初始化

和数组的初始化差不多:
stStudent stu = {
"beyond",
1989,
2,
11,
{
99.9
87.3
100
}
}

其实呢,还可以不要中间嵌套的那个括号,为什么呢,我们先来看看内存:

http://www.jsqmd.com/news/1126006/

相关文章:

  • Codex实战指南:用自然语言驱动代码生成,实现工作流自动化
  • LTC6903数字控制振荡器设计与TM4C1299KCZAD应用实践
  • 6款高复购率数码小玩意深度实测:从磁吸充电到智能温控
  • 别让 AI 自主预判你的需求!场景模板适配选择或自定义,才能让语音记录工具发挥全部价值
  • TikTok产品标题关键词怎么优化?自动提报关键词和手动提报有什么区别
  • MapLibre开源地图引擎:3分钟掌握免费地图开发全攻略
  • iOS应用协议逆向工程:从抓包到模拟客户端的实战解析
  • 终极指南:用LeetDown轻松为旧款iPhone降级,让设备重获新生
  • Unitree RL Gym:四足机器人强化学习框架完全指南
  • RMSprop优化器原理解析与工业级调参实战
  • 百元DIY智能热敏打印机:用ESP32打造你的专属Paperang兼容设备
  • 英雄联盟玩家的终极效率工具:League Akari 完整使用指南
  • RAG 答案引用评测:有引用不等于引用正确
  • web服务器HTTP协议处理部分
  • 3步搞定电脑风扇静音优化:FanControl完整配置指南
  • FruityWiFi可视化无线渗透测试:从原理到实战的完全指南
  • adsadas
  • 代码转图片再 OCR,Fable 成本暴降 60%
  • 让Claude能力飞升:用MCP协议构建自定义工具实战
  • Windhawk终极指南:安全自定义Windows程序界面的完整实战方案
  • 开源可复现大模型评测框架CompassJudger深度解析
  • Session的来龙去脉
  • Apache HTTPD 2.4 日志实战:3步配置自定义格式,精准追踪用户行为
  • 2026年eNSP报错40、41、42、43、一直#号的究极万能解决办法
  • AutoUnipus:智能学习助手如何将U校园网课答题效率提升90%
  • Power BI热力图实战:用矩阵+条件格式驱动业务决策
  • 奔驰音响升级:森索姆和柏林之声到底怎么选?
  • 店群运营怎么选抖店商品搬家工具重点不是快而是可控
  • STM32F373VC与TPS65263的多电压域电源管理方案
  • GeWe 开发指南:微信朋友圈自动发布与定时运营系统实现