结构体


一、什么是结构体

假设我们要存储有关篮球运动员的信息,则可能存储Ta的姓名、工资、身高、体重、平均得分等,希望有一种数据格式可以将这些信息存放在一个单元中。

因此引入了结构的概念

  • 结构是用户定义的类型

  • 结构中所有元素的类型可以不相同

  • 创建结构包括两步:

    1.定义结构描述——它描述并标记了能够存储在结构中的各种数据类型

    2.按描述创建结构变量(结构数据对象)

  • 结构体成员默认为 public

1.定义结构:

它的本质是创建了一个名为information的新的数据类型

struct information
{
char name[20];
float salary;
double height;
};

2.声明结构变量:

information zhangsan;			//C++允许在声明结构变量时省略关键字
struct information lisi;
//或者同时在定义结构后面声明
struct information
{
char name[20];
float salary;
double height;
}wangmazi;

其中zhangsan,lisi,wangmazi都是information结构体的实例,可以被分配和拥有自己的内存,以保存其成员数据。

尽管3个结构体变量具有不同的名称,但每个变量都包含具有相同名称的成员。

3.初始化结构体:

有两种方式初始结构体变量:使用初始化列表或构造函数

1)初始化列表

初始化结构体变量成员的最简单的方法是使用初始化列表。初始化列表是用于初始化一组内存位置的值列表。列表中的项目用逗号分隔并用大括号括起来。

定义和初始化information变量的方式是:先指定变量名,后接赋值运算符和初始化列表:

information LiHua = {"LiHua",5000,191};

也可以仅初始化结构体变量的部分成员:

information LiHua = {"LiHua",5000};

这里只有name和salary成员被初始化,height成员未初始化。但是,如果某个结构成员未被初始化,则所有跟在它后面的成员都需要保留为未初始化。使用初始化列表时,C++不提供跳过成员的方法。

还有一点很重要,不能在结构体声明中初始化结构体成员,因为结构体声明只是创建一个新的数据类型,还不存在这种类型的变量。

2)构造函数初始化结构体

以下是一个名为 Employee 的结构体的声明语句,它包含一个具有两参数的构造函数,以便在创建一个 Employee 变量而不向其传递任何参数时,提供默认值:

struct Employee
{
string name; // 员工姓名
int vacationDays, // 允许的年假
daysUsed; //已使用的年假天数
Employee (string n ="",int d = 0) // 构造函数
{
name = n;
vacationDays = 10;
daysUsed = d;
}
};

4.访问结构体成员:

结构体成员的访问方式与类的公共成员一样,都是使用点运算符。但是,类的数据成员通常是私有的,必须通过函数访问。因为结构数据成员是公共的,所以它们可以被直接访问,并且可以像常规变量一样使用。

zhangsan.name="张三";
zhangsan.salary=4000;
cout<<zhangsan.name<<endl;

二、结构体数组

定义:该数组的每个元素都是一个结构体。

//以下语句定义了一个名为infoList的数组,它有20个元素,每个元素都是一个information结构体
information infoList[20];
//下面的表达式引用了infoList[5]的salary成员
infoList[5].salary;

在算法竞赛中结构体的使用非常普遍,务必掌握

最新文章

  1. java sqlhelper
  2. mongodb(回滚)
  3. 使用SQL生成DateTime.Ticks
  4. jQuery 获取 URL信息
  5. Oracle EBS-SQL (BOM-9):检查系统BOM总数.sql
  6. Asp.Net Core WebApi学习笔记(四)-- Middleware
  7. 创建FTP的Site并用C#进行文件的上传下载
  8. SQLAlchemy入门
  9. ORM-Dapper学习&lt;一&gt;
  10. sql中如何分割字符串
  11. net::ERR_CONNCTION_ABORTED与http post request header is too large 错误
  12. 简说JS中的循环部分
  13. How do I copy SQL Azure database to my local development server?(如何将Azure 中的数据库备份到本地)
  14. C++ concurrency in action 读随记1
  15. ZooKeeper连接并创建节点以及实现分布式锁操作节点排序输出最小节点Demo
  16. STL标准模板类
  17. K8s存储卷、pv和pvc的使用
  18. linux一些比较重要的环境变量。配置文件
  19. Centos 6 安装FreeSWITCH
  20. WCF开发实战系列四:使用Windows服务发布WCF服务

热门文章

  1. Win10远程桌面 报错:CredSSP加密Oracle修正……
  2. ITextSharp开源PDF处理库
  3. paramiko的使用
  4. 【安卓基础】WebView开发优化基础
  5. GitHub 在国内无法访问
  6. leetcode解题报告(13):K-diff Pairs in an Array
  7. python3.5+win7 安装 numpy 和scipy的总结
  8. 解决Virtualbox的根分区容量不够用问题
  9. 高逼格Linux命令,忙的飞起
  10. Babel7知识梳理