3.6  数组

学过前面的基本数据类型之后,我们如今能够定义单个变量来表示单个的数据。比如,我们能够用int类型定义变量来表示公交车的216路;能够用float类型定义变量来表示西红柿3.5元一斤。

可是,除了单个孤立的数据之外,现实世界中另一类批量数据。比如,一个公司全部员工的工资,这些数据的数据类型同样(都是int类型),性质同样(都表示员工的工资),数量非常多(成千上万员工的工资)。而且往往形成一个有意义的数据集合(员工工资)。针对这类的批量数据,单独地定义一个一个的变量来表示显然是行不通的。

为此,C++提供了数组这样的构造型数据类型来表达批量数据,它将这些数据组织起来形成一个数据序列。让这些数据排排坐。吃果果,极大地方便了批量数据的处理。

3.6.1  数组的声明与初始化

在C++中,定义一个数组的方法同定义一个变量的方式很相似,不同的是,变量名变成了数组名。而在数组名之后,我们用中括号“[]”引出了表示数组中数据元素个数的常数。

其详细语法形式例如以下:

数据类型 数组名[个数常量][个数常量]…;

当中,数据类型表示这一系列批量数据的类型。

比方。我们要定义一个能够保存多位员工工资的数组,而每一个员工工资数据都能够用int类型数据表示。那么整个数组的数据类型就是int类型;数组名一般是一个表明数组中数据含义的标识符。在这里,数组中的数据都是员工工资,所以我们能够用arrSalary作为数组名。

当中,arr表示这是一个数组(array),而Salary则表示数组中的数据都是工资;数组名后中括号里的个数常量则表示这一系列批量数据的个数。

比方。这个公司有100000位员工,我们须要在数组中保存100000个工资数据,那么这个个数常量自然就是100000。另外须要注意的是,这个个数常量必须大于0,而且必须是常数。

依据上面的分析,我们能够这样来定义用以保存100000个员工工资数据的数组:

// 保存100000个员工工资的数组
int arrSalary[100000];

在定义数组的同一时候。也能够利用“{}”对数组进行初始化。

比如:

// 定义数组并进行初始化
int nArray[5] = { 1,2,3,4,5 };

这行代码在定义一个长度为5的整型数组nArray的同一时候,用“{}”把1、2、3、4、5分别赋值给数组中的5个元素,以此来完毕数组的初始化。当然。假设不须要对数组中的全部数据都赋初始值。也能够仅对数组的前面部分元素赋值。而剩余的未指定初始值的数据。会被赋值为0或是这样的数据的默认初始值。

比如:

// 给定数组中前6个元素的初始值,剩下94个数据被赋值为0
int nBigArray[100] = { -10, 23, 542, 33, 543, 87 };

尽管我们能够利用“{}”在定义数组的同一时候对数组元素赋初始值。但是数组的数据元素往往较多。要想使用“{}”完毕当中全部数据的赋值,往往是不太现实的。很多其它的时候,我们是利用“{}”将数组中的全部元素都赋值为0,完毕数组使用前的清零操作。比如:

// 将nBigArray数组中的全部元素赋值为0
int nBigArray[100] = { 0 };

知道很多其它:多维数组

数组定义中的中括号“[ ]”用于确定数组的维数。

在数组名后有几个“[ ]”就表示这是一个几维数组,而一个数组的维数,往往代表了当中数据的分类次数。比方。我们要表示一个学校全部学生的成绩,我们往往先把全部学生成绩依照年级分成三个年级,然后每一个年级又能够依照班级分成10个班级。而每一个班级又有30名学生。

这样,经过三次分类,我们就能够用一个三维数组来保存一个学校全部学生的成绩:

// 记录学生成绩三维数组
int arrScore[3][10][30];

3.6.2  数组的使用

定义好数组后,我们就相当于拥有了多个变量,能够引用数组中的数据元素来进行运算。

要想訪问数组中的各个数据。我们通过在数组名后的中括号里给定数组下标来实现。

所谓数组下标,它代表了要訪问的数据在数组中的位置。

要注意的是,这个表示数据位置的下标是从0開始记数的。比方。在我们前面定义的记录员工工资的arrSalary数组中。第一个数据是老板的工资,我们就能够通过例如以下的方式来读写訪问第一个数据:

// 数组中第一个数据表示老板的工资,用下标0表示数组的第一个数据
// 赋值为1,表示老板的工资为1
arrSalary[0] = 1;
// 读取数组中的第一个数据,输出老板的工资
cout<<"老板的工资是:"<<arrSalary[0]<<endl;

这里我们能够看到,通过在数组名之后的中括号里给定0这个下标,我们能够像读写普通变量一样地来读写数组中的第一个数据。以此类推,要想訪问数组中的第二个数据。数组下标就应该是1,要想訪问第n个数据,下标就应该是n-1。比如:

// 数组中的第二个数据表示老板娘的工资, 给定下标1訪问
arrSalary[1] = 99999;
// 往后依次就是各个员工的工资
arrSalary[2] = 2000;
// …

在使用数组下标时。另外须要注意的一个地方是,下标必须大于等于0小于数组定义时的个数常数。简单来讲。一个长度为n的数组,其下标的取值范围是[0。n-1]。假设下标的取值超出了这个范围。就会訪问到数组以外的内存区域。引起数组訪问越界的错误,轻则造成数据读写错误,严重时甚至会导致程序崩溃。而且,这样的错误极具隐蔽性,往往非常难发现。所以我们一開始在使用数组时。就一定要时刻注意防止数组訪问越界。

数组下标与数组中数据元素的相应关系例如以下图所看到的:

图3-3 数组中数据元素与下标的相应关系

相同的道理。对于二维数组、三维数组等多维数组。相同能够通过给定多个下标来訪问数组中的数据元素。比如:

// 第一个年级。第二个班级,第26位同学的成绩是82
arrScore[0][1][25] = 82;

这里我们能够看到。通过下标对数组中元素进行读写訪问,就像使用一个单独的变量一样简单。有了数组的帮忙。我们在描写叙述大量性质同样的数据时。就无须单独地定义多个同样类型的变量,而仅仅需定义一个能容纳须要处理数据的数组,然后通过不同的下标就能够訪问到不同的数据。也就像拥有多个单独变量一样方便。

你好,C++(12)怎样管理多个类型同样性质同样的数据?3.6 数组的更多相关文章

  1. 你好,C++(12)如何管理多个类型相同性质相同的数据?3.6 数组

    3.6  数组 学过前面的基本数据类型之后,我们现在可以定义单个变量来表示单个的数据.例如,我们可以用int类型定义变量来表示公交车的216路:可以用float类型定义变量来表示西红柿3.5元一斤.但 ...

  2. Linux 0.12 内核管理存储器

    Linux 0.12 内核管理存储器 其分段,用分段的机制把进程间的虚拟地址分隔开. 每一个进程都有一张段表LDT.整个系统有一张GDT表.且整个系统仅仅有一个总页表. 其地址翻译过程为: 程序中给出 ...

  3. 使用Atlas进行元数据管理之Type(类型)

    背景:笔者和团队的小伙伴近期在进行数据治理/元数据管理方向的探索, 在接下来的系列文章中, 会陆续与读者们进行分享在此过程中踩过的坑和收获. 元数据管理系列文章: [0] - 使用Atlas进行元数据 ...

  4. Golang高阶:Golang1.5到Golang1.12包管理

    Golang1.5到Golang1.12包管理 1. 前言 Golang 是一门到如今有十年的静态高级语言了,2009年的时候算是正式推出了,然后到最近的一两年,2017-2018年的时候,突然直线上 ...

  5. 你好,C++(23) 4.4.2 工资程序成长记:用数组处理批量数据,用循环结构执行重复动作

    4.4  从语句到程序 了解了各种表达式和语句之后,就相当于掌握了写作文要用到的词语和句子,但是,仅有词语和句子是无法构成一篇有意义的文章的.要完成一篇文章,先需要确定这篇文章的结构,是先分述再总述, ...

  6. 答:SQLServer DBA 三十问之一: char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使用T-SQL查询数据有啥不一样;

    http://www.cnblogs.com/fygh/archive/2011/10/18/2216166.html 1. char.varchar.nvarchar之间的区别(包括用途和空间占用) ...

  7. 企业级容器管理平台 Rancher 介绍入门及如何备份数据

    企业级容器管理平台 Rancher 介绍入门及如何备份数据 是什么 Rancher 是一个为 DevOps 团队提供的完整的 Kubernetes 与容器管理解决方案的开源的企业级容器管理平台.它解决 ...

  8. /Array.CreateInstance创建类型为int,长度为5的数组

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace Console ...

  9. Linux-3.14.12内存管理笔记【伙伴管理算法(1)】

    前面分析了memblock算法.内核页表的建立.内存管理框架的构建,这些都是x86处理的setup_arch()函数里面初始化的,因地制宜,具有明显处理器的特征.而start_kernel()接下来的 ...

随机推荐

  1. linux定时器

    我们常常有设置系统在某一时间执行相应动作的需求,比如设置电脑什么时候自动锁屏,什么时候自动关机,设置应用程序什么时候自动运行,什么时候自动退出.这些与时间相关的功能,都需要依靠操作系统中的定时器来实现 ...

  2. spring mvc easyui tree 异步加载树

    使用spring mvc 注解 异步加载一棵树 jsp: <ul id="orgInfoTree"></ul> $(function(){ loadOrgT ...

  3. <select>与<datalist>的区别

    size:下拉框中每次出现选项的个数 multiple:可以一次性选多个选项: disabled:时下拉框不可用,无法点击选项​ list:它的值应于id的值对应 datalist要与input标签一 ...

  4. Discuz!源代码阅读笔记之common.inc.php文件【1】

    <?php /* [Discuz!] (C)2001-2007 Comsenz Inc. This is NOT a freeware, use is subject to license te ...

  5. C# 进销存系统开发框架

    C/S系统开发框架-企业版 V4.0 (Enterprise Edition) 简介: http://www.csframework.com/cs-framework-4.0.htm 视频下载: 百度 ...

  6. python读写Excel文件的函数--使用xlrd/xlwt

    python中读取Excel的模块或者说工具有很多,如以下几种: Packages 文档下载 说明 openpyxl Download | Documentation | Bitbucket  The ...

  7. Start Your Django Project in Nginx with uWsgi

    Step 0:Install A,B,C,blabla needed This can be seen in my another article in the blog.click here(una ...

  8. O-C浮点数转化整数

    1.简单粗暴,直接转化 float f = 1.5; int a; a = (int)f; NSLog("a = %d",a); 输出结果是1.(int)是强制类型转化,丢弃浮点数 ...

  9. Vim C/C++的一键编译

    开始用Vim差不多有两个月的时间, 一开始用Makefile 编译一整个项目无压力, 但是当写到单个文件的时候, 编译就比较麻烦了, 每次都得 :w :!gcc -o 1.exe 1.c :!1 非常 ...

  10. c# appdomain

    http://www.cnblogs.com/Terrylee/archive/2005/11/28/285809.html