前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EasyC++13,结构体初探

EasyC++13,结构体初探

作者头像
TechFlow-承志
发布2022-08-26 16:40:58
2050
发布2022-08-26 16:40:58
举报
文章被收录于专栏:TechFlow

作者 | 梁唐

大家好,我是梁唐。

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

结构体

定义结构体

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

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

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

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

代码语言:javascript
复制
struct student {
 string name;
    bool gender;
    double scores;
};

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

代码语言:javascript
复制
student xiaoming;
student john;

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

代码语言:javascript
复制
cout << john.name << endl;

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

代码语言:javascript
复制
// 写法1
struct student {
 string name;
    bool gender;
    double scores;
};

int main() {
    // do something
    return 0;
}

// 写法2
int main() {
    struct student {
        string name;
        bool gender;
        double scores;
    };
    // do something
    return 0;
}

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

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

初始化方式

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

代码语言:javascript
复制
student xiaoming = {"xiaoming", 1, 3.5};

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

代码语言:javascript
复制
student xiaoming {"xiaoming", 1, 3.5};

结构体数组

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

代码语言:javascript
复制
struct student {
 string name;
    bool gender;
    double scores;
};

student sts[10];

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

代码语言:javascript
复制
student sts[2] = {
    {"xiaoming", 1, 3.6},
    {"john", 1, 5.2}
};
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coder梁 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 结构体
    • 定义结构体
      • 初始化方式
        • 结构体数组
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档