实际应用中,我们往往希望把很多不同的信息组合起来,“打包”存储在一个单元中。比如一个学生的信息,可能包含了姓名、年龄、班级、成绩…这些信息的数据类型可能是不同的,所以数组和vector都无法完成这样的功能。

C/C++中提供了另一种更加灵活的数据结构——结构体。结构体是用户自定义的复合数据结构,里面可以包含多个不同类型的数据对象。

结构体的声明

声明一个结构体需要使用struct关键字,具体形式如下:

struct 结构体名

{

类型1 数据对象1;

类型2 数据对象2;

类型3 数据对象3;

};

图片来源于网络,侵删

结构体中数据对象的类型和个数都可以自定义,这为数据表达提供了极大的灵活性。结构体可以说是迈向面向对象世界中“类”概念的第一步。

我们可以尝试定义这样一个“学生信息”结构体:

struct studentInfo

{

string name;

int age;

double score;

};

这个结构体中包含了三个数据对象:string类型的名字name,int类型的年龄age,以及double类型的成绩score。一般会把结构体定义在主函数外面,称为“外部定义”,这样可以方便外部访问。

结构体初始化

定义好结构之后,就产生了一个新的类型,叫做“studentInfo”。接下来就可以创建这种类型的对象,并做初始化了。

// 创建对象并初始化

studentInfo stu = {"张三", 20, 60.0};

结构体对象的初始化非常简单,跟数组完全一样:只要按照对应顺序一次赋值,逗号分隔,最后用花括号括起来就可以了。

结构体还支持其它一些初始化方式:

struct studentInfo

{

string name;

int age;

double score;

}stu1, stu2 = {"小明", 18, 75.0}; // 定义结构体之后立即创建对象

// 使用列表初始化

studentInfo stu3{"李四", 22, 87};

// 使用另一结构体对象进行赋值

studentInfo stu4 = stu2;

需要注意:

l 创建结构体变量对象时,可以直接用定义好的结构体名作为类型;相比C语言中的定义,这里省略了关键字struct

l 不同的初始化方式效果相同,在不同位置定义的对象作用域不同;

l 如果没有赋初始值,那么所有数据将被初始化为默认值;算术类型的默认值就是0;

l 一般在代码中,会将结构体的定义和对象的创建分开,便于理解和管理

访问结构体中数据

访问结构体变量中的数据成员,可以使用成员运算符(点号.),后面跟上数据成员的名称。例如stu.name就可以访问stu对象的name成员。

cout << "学生姓名:" << stu.name << "\t年龄:" << stu.age << "\t成绩:" << stu.score << endl;

这种访问内部成员的方式非常经典,后面要讲到的类的操作中,也会用这种方式访问自己的成员函数。

结构体数组

可以把结构体和数组结合起来,创建结构体的数组。顾名思义,结构体数组就是元素为结构体的数组,它的定义和访问跟普通的数组完全一样。

// 结构体数组

studentInfo s[2] = {

{"小红", 18, 92},

{"小白", 20, 82}

};

cout << "学生姓名:" << s[0].name << "\t年龄:" << s[0].age << "\t成绩:" << s[0].score << endl;

cout << "学生姓名:" << s[1].name << "\t年龄:" << s[1].age << "\t成绩:" << s[1].score << endl;

C++编程:复合数据类型—结构体相关推荐

  1. Go 语言编程 — 高级数据类型 — 结构体

    目录 文章目录 目录 结构体 访问结构体成员 向函数传递结构体 结构体指针 结构体标签(Struct Tag) 结构体 Golang 中,结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.与 ...

  2. C 语言编程 — 高级数据类型 — 结构体与位域

    目录 文章目录 目录 前文列表 结构体 定义结构体 初始化结构体变量 访问结构体成员 结构体的内存分布 将结构体作为实参传入函数 指向结构体变量的指针 位域 定义位域 使用位域结构体的成员 前文列表 ...

  3. C 语言编程 — 高级数据类型 — 共用体

    目录 文章目录 目录 前文列表 共用体 定义共用体 访问共用体成员 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本 ...

  4. c++中的构造数据类型----结构体

    c++中的构造数据类型----结构体 构造数据类型: 无论是基本数据类型还是数组类型都仅仅描述了事物某一方面的特性, 但是, 一种事物往往具有多方面的属性, 如一个同学有学号, 姓名, 性别, 年龄等 ...

  5. GO语言编程基础-复合类型结构体

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 1 结构体类型 有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性.显然 ...

  6. C语言常用编程技巧-结构体数组

    本文主要用来记录C语言常用编程技巧,完成一下目的: 1.函数指针如何定义使用: 2.结构体数组如何定义使用: 3.callback 方法使用技巧: 以下代码为在ubuntu 系统进行编译,文件名为 s ...

  7. linux sockaddr结构体,linux网络编程笔记 sockaddr_in结构体[转]

    struct sockaddr { unsigned short sa_family; char sa_data[14]; }; 此数据结构用做bind.connect.recvfrom.sendto ...

  8. python高级ctypes数据类型—结构体

    结构体在ctypes中通过类进行定义.用于定义结构体的类需要继承自ctypes的Structure基类,而后通过定义类的_fields_属性来定义结构体的构成._fields_属性一般定义为一个二维的 ...

  9. 自定义数据类型——结构体

    结构体的定义与使用 数组是一种数据形式,其特点是多个相同类型的元素集合起来 结构体是另一种重要的数据形式,特点是将不同类型的成员组合起来 数组和结构体形成了两种风格迥异的聚合方式,通过他们以及相互组合 ...

最新文章

  1. 【Spring】银行转账案例
  2. 第五十四期:Libra盟友纷纷“跳船”,联盟链还有戏吗?
  3. oracle sum详解,oracle sum()聚合函数
  4. 飞龙的程序员书单 – 数据结构、算法
  5. “有本事你去学校数据库把期末成绩改了“,“好,你等着。“
  6. 2021-06-07java继承
  7. PHPExcel 插件使用详解
  8. lstm python_5.8 莫烦 Python RNN LSTM 循环神经网络 (分类例子)
  9. COCI 2016/2017 Round 4 C dp
  10. 2021年安全生产模拟考试(全国特种作业操作证电工作业-防爆电气模拟考试题库二)安考星
  11. iOS视频播放的基本方法
  12. 海思3559AV100 HiSysLink 之 IPCMSG
  13. TeamCity持续集成和持续交付Docker
  14. pci总线定时协议_PCI总线标准及协议
  15. 什么是Nginx?有什么用?
  16. python求多叉树任意两点之间的距离
  17. 新手利用C# 实现简单仿QQ登陆注册功能
  18. 非劣效性 等效性 有效性临床试验
  19. DB4AI:使能数据库原生AI计算,助力数据湖场景业务成功
  20. Python爬虫自学系列(五)

热门文章

  1. 判断用户输入的数字是奇数还是偶数
  2. Microarchitecture:Macro Fusion
  3. android自定义过渡动画,11.自定义过渡动画
  4. 华为虚拟服务器系统,华为虚拟主机管理系统
  5. 汇聚瞩目 耀然开启!DTC2022第二届数字孪生城市建设与产业发展高峰论坛
  6. FL1000型风电机组水冷系统用 风冷机组的研制
  7. 通过微信公众号给女朋友推送消息
  8. oracle 截取字符串中间_oracle截取字段中的部分字符串
  9. 社交网络电影人物解析,社交网络 电影解析
  10. [英语语法]词法之动词:情态动词