结构体


一、什么是结构体

假设我们要存储有关篮球运动员的信息,则可能存储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;

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

C++结构体基础知识的更多相关文章

  1. C++指针和结构体基础知识

    学习C++首先要回忆起C语言当中的指针和结构体知识,本文作者将通过一段代码来总结指针和结构体基础知识:指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使 ...

  2. 35深入理解C指针之---结构体基础

    一.结构体基础 1.定义:结构体大大加强了C的数据聚合能力,可以使得不同类型的数据进行结合 2.特征: 1).结构体可以使得不同类型的数据进行结合 2).结构体可以使用内置的数据类型,包括指针 3). ...

  3. 结构体struct知识

    2022-10-12 08:52:03 //    结构体知识#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<m ...

  4. c语言结构体小知识

    引自:http://c.biancheng.net/cpp/html/88.html 结构体在内存中是连续存储的 struct stu{ char *name; //姓名 int num; //学号 ...

  5. Delphi的程序单元、结构、基础知识(转)

    Object Passal的程序结构很特殊,与其它语言如C++,Object Windows等结构都不同.一个Delphi程序由多个称为单元的源代码模块组成.使用单元可以把一个大型程序分成多个逻辑相关 ...

  6. Linux目录结构和基础知识

    目录结构: /bin:存放系统常用的命令程序 /boot:系统启动或引导所需要的一些文件 /dev:可用的设备文件 /etc:系统配置相关的东西 /home:所有用户的主目录 /lib,lib64:存 ...

  7. go 基础 结构体

    结构体是类型中带有成员的复合类型.go语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. go语言中的类型可以被实例化,使用new和&构造类型实例的类型是类型的指针. 结构体 ...

  8. 关于结构体的具体解说,C、C++中的差别

    1. C.C++内置的类型分两种,一种是基本数据类型.一种是复合数据类型.此处我们要讲的结构体便是复合数据类型. 先来讨论一下结构体存在的意义吧.或许你觉得主要的数据类型就够了,为什么还要有结构题这样 ...

  9. 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符

    [源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...

随机推荐

  1. idea 复制多条字符串

    ctrl+c复制信息后可以通过ctrl+shift+v查看最近复制的字符串

  2. FireFox版本大于36.0,Yslow不能正常使用解决方案

    Yslow暂时不支持firefox 36.0及以上版本你可以使用它的书签版本.访问这里 http://yslow.org/mobile/把页面最后的那个 Desktop Bookmarklet Ins ...

  3. BBS 页面搭建知识点整理

    表关系图及建表 from django.db import models # Create your models here. from django.contrib.auth.models impo ...

  4. Sql中partition by的使用

    partition by关键字是oracle中分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partition by用于给结果集分 ...

  5. 连续攻击游戏【P1640洛谷】二分图匹配变形【好题】【每次memset太慢了,用时间戳id。】

    lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备最多只能使 ...

  6. [Number]js中数字存储(0.1 + 0.2 !== 0.3)

    和其他编程语言(如 C 和 Java)不同,JavaScript 不区分整数值和浮点数值, 所有数字在 JavaScript 中均用浮点数值表示,遵循IEEE754标准,在进行数字运算的时候要特别注意 ...

  7. django -过滤器的使用

    前情提要: 最近工作中用到django 中的  自定制过滤器的内容, 再此 复习一波过滤器和自定制 过滤器的内容 自定制过滤器   1.在settings中的INSTALLED_APPS配置当前app ...

  8. ora-28002

    1.查看指定概要文件(如default)的密码有效期设置: SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_na ...

  9. 配置apt源

    vim /etc/apt/source.list 配置完成后执行 apt update apt upgrade 配置完源之后,就可以在源中所有想要的包 apt search xxx 本地自带的源配目录 ...

  10. 使用 nginx_rtmp_module 搭建个人学习流媒体服务器

    nginx 共享服务器中的视频 如果服务器处于内网或者没有公网ip,可以使用 相关软件进行打洞或转发 如: frpc https://github.com/fatedier/frp 或 holer h ...