文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

EasyC++,结构体初探

2024-12-02 19:04

关注

大家好,我是梁唐。

这是EasyC++系列的第13篇,咱们来聊聊C++当中的结构体。

想要追求更好阅读体验的同学,可以点击文末的「阅读原文」,访问github仓库。

结构体

定义结构体

数组可以存储多个同类型的变量,但如果我们想要存储多个不同类型的变量呢?比如说我们想要存储一个学生的姓名、年龄、性别、考试分数,这些变量可能string, int, float都有,显然就不能使用数组了。

为了满足这样的存储要求,我们可以使用C++当中的结构体(struct)。在同一个结构体当中,我们可以定义许多种不同类型的变量,就可以满足我们各种各样的需求了。如果我们想要存储多个这样的内容,还可以将它定义成数组。

结构体和类已经很接近了,所以理解结构体对于理解面向对象非常有帮助。虽然算法竞赛当中一般用不到面向对象,但是对于开发者来说,面向对象可以说是必学的内容。C++ primer中说,结构体是C++ OOP(面向对象编程)的基石。

我们使用关键字struct来定义一个结构体:

  1. struct student { 
  2.  string name
  3.     bool gender; 
  4.     double scores; 
  5. }; 

表示定义了一个结构体,它的类型名是student,花括号当中括起来的内容是结构体的成员变量。注意student是类型名,也就是说我们可以用它来定义出student类型的变量:

  1. student xiaoming; 
  2. student john; 

我们可以用.来访问结构体内部的元素:

  1. cout << john.name << endl; 

struct的定义有两种写法,既可以写在main函数外部,也可以写在main函数内部。如:

  1. // 写法1 
  2. struct student { 
  3.  string name
  4.     bool gender; 
  5.     double scores; 
  6. }; 
  7.  
  8. int main() { 
  9.     // do something 
  10.     return 0; 
  11.  
  12. // 写法2 
  13. int main() { 
  14.     struct student { 
  15.         string name
  16.         bool gender; 
  17.         double scores; 
  18.     }; 
  19.     // do something 
  20.     return 0; 

逻辑上两种方式完全一样,只是第一种方式student类型可以被任何函数使用,但如果写在main函数内部,就只能在main函数内部使用。

结构体变量也可以定义在函数内部定义,定义在外部的变量被所有函数所共享,也就是全局变量。C++ primer当中提倡尽量使用外部结构体。

初始化方式

我们可以和数组一样,在花括号内使用逗号进行分隔,如:

  1. student xiaoming = {"xiaoming", 1, 3.5}; 

编译器会按照顺序,分别将"xiaoming"赋值给name,1赋值给gender,3.5赋值给score。我们也可以使用C++11的列表初始化方式省略掉中间的等于号:

  1. student xiaoming {"xiaoming", 1, 3.5}; 

结构体数组

定义了结构体之后,我们还可以像是基础变量类型一样定义结构体数组。

  1. struct student { 
  2.  string name
  3.     bool gender; 
  4.     double scores; 
  5. }; 
  6.  
  7. student sts[10]; 

对于结构体数组来说,我们也可以使用列表初始化方式来初始化,由于结构体本身的初始化就用到花括号,所以数组的初始化会使用到花括号的嵌套,像是这样:

  1. student sts[2] = { 
  2.     {"xiaoming", 1, 3.6}, 
  3.     {"john", 1, 5.2} 
  4. }; 

 

来源:Coder梁内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯