(四十五)数组

数组(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个字节。

 

时间: 2024-09-17 16:55:28

(四十五)数组的相关文章

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十五)

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十五)制作精美的可任意拖放对象的物品栏及装备栏 在通常的网络游戏中,物品.装备.技能.快捷按钮等窗口中的图标都是可以相互拖放的,不同的栏目有着不同的限制,例如技能图标不能拖放到物品栏及装备栏中,且不是所有的魔法技能都可以拖放(如被动技能等):而非装备类的所有物品则无法拖放到角色的装备栏中.那么本节我将向大家讲解如何在本教程示例游戏中添加物品栏及装备栏,并实现它们之间双向物品交换的两种模式:拖放模式和双击模

Ruby on rails开发从头来(四十五)- ActiveRecord基础(读取记录)

读取记录包括指定那些特定的数据是你感兴趣的,你给Active Record指定标准,Active Record再返回给你一些对象,其中包含了符合条件的记录的数据. 在一个表中检索数据的最简单的办法就是指定主键,任何一个Model都支持find()方法,该方法支持一个或多个主键值,如果只指定了一个主键,将会返回对应的对象,如果指定了多个主键给find方法,该方法一组相应的对象.注意,当没有任何符合条件的数据的时候,将会抛出一个RecordNotFound异常,所以如果find方法没有抛出这个异常的

ASP 3.0高级编程(四十五)

编程|高级 异步执行是指在后台检索数据,可以在全部数据返回之前在Web页面上使用已经得到的数据.虽然可能需要的是全部的数据,但异步工作至少可提前开始处理数据.也可让用户先看到某些内容,这使得Web站点看上去响应能力更强.与TDC类似,RDS数据控件可以通过设置OBJECT标记的参数或编写代码来设置其属性.下面举一个例子:<OBJECT CLASSID="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"ID="dsoAuthors&q

猪八戒网答草根五十五问

中介交易 SEO诊断淘宝客 站长团购 云主机 技术大厅 大家好,我是猪八戒网的朱明跃,一个一不小心从传统媒体进入互联网的新手,今后还要多向各位请教. 下面说说我的经历:我的经历比较草根,19岁开始教了三年书,做了9个月的乡干部,8年记者,去年国庆节辞去重庆晚报首席记者,专职运营猪八戒网 . 猪八戒网其实很简单,就是一个服务类的电子商务网站,和淘宝不同的是,在我们网站上交易的不是实物,而是服务.而交易的方式,就是悬赏竞标式.猪八戒网早在2005年就有了,当时只是我的一个个人博客站,我用OBLOG程

第十五届中国政府网站绩效评估结果发布:五个亮点、五个不足和四个建议

"在刚刚过去的两会上,二维码已经印到了两高的报告中,并且在政府部长通报会上也有扫码问询服务.此外,从2016年第四次全国政府网站抽查情况中发现,全国政府网站的总数由2016年初的6万多万家减少到4万多家,减少了30%,服务越来越多应用越来越普遍,但是政府网站总数越来越少." 中国电子信息产业发展研究院院长卢山谈到了两个小例子,他说经过近十五年的发展,政府网站的建设.运营.服务,无论从速度.广度.高度还是深度等方面,都产生了翻天覆地的变化. 3月28日,"第十五届中国政府网站绩

jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween_jquery

在jQuery内部函数Animation中调用到了createTweens()来创建缓动动画组,创建完成后的结果为: 可以看到上面的缓动动画组有四个原子动画组成.每一个原子动画的信息都包含在里面了. 仔细查看createTweens函数,实际上就是遍历调用了tweeners ["*"]的数组中的函数(实际上就只有一个元素). function createTweens( animation, props ) { jQuery.each( props, function( prop, v

jQuery 1.9.1源码分析系列(十五)之动画处理_jquery

首先需要有队列(queue)的基本知识.见上一章. 相关教程:jQuery下的动画处理总结: http://www.jb51.net/article/42000.htm jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween  :http://www.jb51.net/article/75821.htm a.动画入口jQuery.fn.animate函数执行流程详解 ------------------------------------------------------

经典算法题每日演练——第二十五题 块状链表

原文:经典算法题每日演练--第二十五题 块状链表 在数据结构的世界里,我们会认识各种各样的数据结构,每一种数据结构都能解决相应领域的问题,每一种数据结构都像 是降龙十八掌中的某一掌,掌掌毙命... 当然每个数据结构,有他的优点,必然就有它的缺点,那么如何创造一种数据结构 来将某两种数据结构进行扬长避短,那就非常完美了.这样的数据结构也有很多,比如:双端队列,还有就是今天讲的 块状链表,    我们都知道 数组 具有 O(1)的查询时间,O(N)的删除,O(N)的插入...            

(保存)C#基础概念二十五问

C#基础概念二十五问 注:本文部份资料来自网络,如有侵权,请与我联系,我会在第一时间声明引用或将其删除!     当初学 C# 时是找个人大概问了一下数据类型和分支语句就开始做项目了.这两天又全面的看了一下相关的基础知识(学而时习之嘛),总结了25个问题: 1.静态变量和非静态变量的区别?2.const 和 static readonly 区别?3.extern 是什么意思?4.abstract 是什么意思?5.internal 修饰符起什么作用?6.sealed 修饰符是干什么的?7.over