(四十五)数组

简介:

数组(aaray)是一种数据格式,能够存储多个同类型的值。比如能存60个int,或者12个short,365个float(那能存更多的int或者short么?还是这只是举例?)。每个值都存储在一个独立的数组元素中,计算机在内存中依次存储数组的各个元素。

 

创建数组,类似要做int a之类的声明,数组的声明应指出以下三点:

①存储在每个元素中的值的类型;(应该是比如说第一个是int,第二个是float之类吧)

②数组名;(类似变量名)

③数组中的元素数。(就是有多少个值)

举例:int shuxing[5]; 就是指在数组shuxing 中,有五个值,他们都是int类型

 

通用格式如下: 

类型名 数组名[数组值的个数];

其中,数组值的个数需要是整型常数,或者常量(例如被const限制的常量const a=10;),也可以是常量表达式。总之,要是一个固定的数字,不能是变量。

 

数组的类型:

比如说int abc[10]; 则数组abc的类型是int数组,而不是数组。

 

数组的排列:

比如说一个数组10个值,int abc[10];  数组排列方式是从0开始的。那么数组abc第一个数的表示方法是abc[0],第十个数的表示方法是abc[9],第N个数的表示方法为abc[N-1]。

另外,可以单独访问数组中的某一个数,例如上面abc数组第4个数的访问方法就是abc[3]

注意:第n个数在表示的时候,括号里不是n,是n-1

 

数组的声明:

方法一:

int abc[3];
	//按照说明,有可能出现无法编译的情况。如果出现这种情况的话,可以使用以下来替代:
	//static int abc[3];
	abc[0] = 1;
	abc[1] = 4;
	abc[2] = 7;

方法二:


	int abc[3] = { 1,4,7 };

这两个方法是等价的。

 

上代码:


#include <iostream>

int main()
{
	using namespace std;
	int shuliang[3] = { 1,3,5 };	//声明方法一,数组中每个值都是int
	int jiage[3];	//声明方法二,数组中每个值都是int
	jiage[0] = 2;	//第一个数的编号为0
	jiage[1] = 3;	//第二个数的编号为1
	jiage[2] = 4;	//第三个数的编号为2
	int zongjia = shuliang[0] * jiage[0] + shuliang[1] * jiage[1] + shuliang[2] * jiage[2];	//不同数组中的值相乘相加的方法,类似多个变量之间相乘相加。
	cout << "我们要买铅笔,钢笔,签字笔。\n";
	cout << "铅笔的数量为:" << shuliang[0] << "支。钢笔为:" << shuliang[1] << "支。签字笔为" << shuliang[2] << "支。" << endl;
	cout << "他们的价格分别为(元/支):" << jiage[0] << "," << jiage[1] << "," << jiage[2] << ".\n";
	cout << "我们总共要买 " << shuliang[0] + shuliang[1] + shuliang[2] << " 支笔。" << endl;	//数组内的值相加的方法,类似变量相加
	cout << "总价为: " << zongjia << " 元。" << endl;
	cout << endl;
	cout << "价格数组的字节长度为 " << sizeof jiage << " 个字节\n";
	cout << "铅笔价格的字节长度为	" << sizeof jiage[0] << " 个字节" << endl;
	system("pause");
	return 0;
}

输出结果:


我们要买铅笔,钢笔,签字笔。
铅笔的数量为:1支。钢笔为:3支。签字笔为5支。
他们的价格分别为(元/支):2,3,4.
我们总共要买 9 支笔。
总价为: 31 元。

价格数组的字节长度为 12 个字节
铅笔价格的字节长度为    4 个字节

注:在上面那个代码中,jiage和shuliang在直接使用的时候,都是一个数组,而jiage[0]是一个int变量(因为数组在声明的时候用的int)。这两个并不同。

 

数组的初始化:

数组在初始化时,是有要求的。例如以下五行代码,有的可以,有的就不可以。

再上代码:

	int aaa[3] = { 1,3,5 };	//这是可以用的~
	int bbb[3];		//这也是可以用的~
	bbb[3] = { 1,2,3 };	//这是错误的。编译器认为后面是给bbb数组中第4个变量赋值(实际上没第4个,也不能这么赋值),而非给数组bbb中的三个数赋值
	bbb[3] = aaa[3];	//错误,这并非将一个数组的值赋值给另外一个数组,而是将aaa数组中第四个数赋值给bbb数组中第四个数。
    bbb = aaa;	//错误,不能直接将一根数组的值赋值给另外一个数组。

另外,在初始化的时候,可以不用给所有数组中的值进行赋值,没有赋值的数组中的数,被认为是0。

上代码:


#include <iostream>

int main()
{
	using namespace std;
	int aaa[5] = { 0 };	//在这行代码中,数组aaa中第一个数的值为0,没有被赋值的后面4个数的值为0
	int bbb[3] = { 1,2 };	//在这行代码中,数组bbb中第一个数为1,第二个数为2,没有被赋值的第三个数为0
	int ccc[5] = {};	//在这行代码中,数组ccc中五个没有被赋值的数的值都为0
	int ddd[] = { 1,3,5 };	//在这行代码中,数组ddd一共有3个数(即等同于int ddd[3]={1,3,5};)
	int ggg[3]{ 1,3,5 };	//不用等号也是可以的。
	cout << "数组aaa第四个数为:" << aaa[3] << endl;
	cout << "数组bbb第三个数为:" << bbb[2] << endl;
	cout << "数组ccc第一个数为:" << ccc[0] << endl;
	cout << "数组ddd第三个数为:" << ddd[2] << endl;
	cout << "数组ggg第二个数为:" << ggg[1] << endl;
	cout << "以下数字显示异常,是因为超出数组范围,比如数组中只有三个数,要显示第四个数" << endl;
	cout << "数组bbb(声明的时候只有三个数)第四个数为:" << bbb[3] << endl;
	system("pause");
	return 0;
}

输出结果为:


数组aaa第四个数为:0
数组bbb第三个数为:0
数组ccc第一个数为:0
数组ddd第三个数为:5
数组ggg第二个数为:3
以下数字显示异常,是因为超出数组范围,比如数组中只有三个数,要显示第四个数
数组bbb(声明的时候只有三个数)第四个数为:-858993460

总之:

①如果要一次初始化多个数,只能在声明数组的时候进行初始化才行,否则要逐个进行初始化;

②初始化数组的时候,没有进行初始化的数,默认为0;

③不能将一个数组中所有数直接复制给另外一个数组中的数;

④数组中的数,使用方法类似变量名的使用方法,只不过需要声明使用的是数组中的第几个数,第N个则在中括号里的数字为N-1。

⑤不要将浮点类型的值在初始化声明的时候,赋值给数组中的数。例如int abc[3]={1,2,3.0};这种是错误的。

 

 

另外,按照说明,一般不要让编译器计算数组中元素的个数(即值的个数),因为可能你自己在输入的时候漏掉一个或者几个数,这就麻烦了。但是这种方法,对于将字符数组初始化为一个字符串来说比较安全(现在还不明白)

再另外,可以用sizeof来确认你数组中的元素数是否如你计划中的数量。比如int变量,一个是4字节,如果你数组中有5个数,那么sizeof数组应该为20个字节。

 


目录
相关文章
|
存储 测试技术 C#
C#之四十四 滑铁卢战役
C#之四十四 滑铁卢战役
102 0
|
6月前
|
Java 索引
【Java每日一题】— —第十八题:求二维数组中的元素最小值及其索引。
【Java每日一题】— —第十八题:求二维数组中的元素最小值及其索引。
【数组的使用续篇】
【数组的使用续篇】
44 0
|
Java 程序员 API
Java语言特点 && 8种基本数据类型 && 标识符等练习题 && 插入/希尔/选择/堆/冒泡/快速/归并/计数排序
Java语言特点 && 8种基本数据类型 && 标识符等练习题 && 插入/希尔/选择/堆/冒泡/快速/归并/计数排序
48 0
|
搜索推荐 Java 索引
【JavaSE】Java基础语法(二十三):递归与数组的高级操作
1. 递归 1.1 递归 递归的介绍 以编程的角度来看,递归指的是方法定义中调用方法本身的现象 把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解 递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算
|
Java
Java经典编程习题100例:第18例:编写程序,将一个数组中的元素倒排过来。例如原数组为1,2,3,4,5;则倒排后数组中的值
Java经典编程习题100例:第18例:编写程序,将一个数组中的元素倒排过来。例如原数组为1,2,3,4,5;则倒排后数组中的值
246 0
|
Java
Java经典编程习题100例:第20例:求一个3*3矩阵对角线元素之和
Java经典编程习题100例:第20例:求一个3*3矩阵对角线元素之和
117 0
|
存储 JavaScript 前端开发
ES6躬行记(13)——类型化数组
  类型化数组(Typed Array)是一种处理二进制数据的特殊数组,它可像C语言那样直接操纵字节,不过得先用ArrayBuffer对象创建数组缓冲区(Array Buffer),再映射到指定格式的视图(view)之后,才能读写其中的数据。总共有两类视图,分别是特定类型的TypedArray和通用类型的DataView。在ES6引入类型化数组之后,大大提升了JavaScript数学运算的性能。
|
Java 开发者 索引
数组的定义与使用(数组案例:二分查找法)|学习笔记
快速学习 数组的定义与使用(数组案例:二分查找法)
100 0
数组的定义与使用(数组案例:二分查找法)|学习笔记
|
索引
第三章--第六节:元祖
第三章--第六节:元祖
107 0