博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《交互式程序设计 第2版》一2.3.2 数组
阅读量:6643 次
发布时间:2019-06-25

本文共 1940 字,大约阅读时间需要 6 分钟。

本节书摘来华章计算机《交互式程序设计 第2版》一书中的第2章 ,第2.3.2节,Joshua Noble 著 毛顺兵 张婷婷 陈宇 沈鑫 任灿江 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.3.2 数组

数组比之前提到的数据类型要复杂一点。一个数组由1个或多个变量排列而成。要记住一点,本书一直在讨论的三个工具,它们工作起来是稍有不同的。我们现在就来看看,这三个工具各是如何填充数组的。

数组是由多个元素组成的列表。在以下的程序段里,数组包含的是整数1、2和3。这并没什么精妙之外,但会是个不错的起点。
注意图2-2数组里每个元素头上的标记:numbers[0]、numbers[1]和 numbers[2],这些是访问数组的运算符。不是录入错误,的确是从0开始。等我们学会怎么创建数组之后再回头讨论这个0的问题。
image

图2-2:含3个整数的数组

这个数组在Processing里是这样建立的:

int[] numbers = new int[3];numbers[0] = 1;numbers[1] = 2;numbers[2] = 3;

首先看这个数组的声明,如图2-3所示。

image

图2-3:Processing对数组的声明,该数组包含3个整数

数组所包含的元素可以是任何类型,甚至是你自己创造的类型。以上代码块将数组里每一个元素都赋值了。可使用运算符[ ]来访问方括号中序号所指的那个元素。

int x = numbers[0];

上面这一行将x赋值为1,因为数组中首个元素是1。

int y = numbers[1] + numbers[2];

上面这一行将y赋值为第2个元素和第3个元素的和,即2+3,得到5。如果把等号放在带有访问运算符的后面,则是对其指向的数组元素赋值:

numbers[0] = 1;numbers[0] = 5;

numbers[0]起初等于1,现在变成了5。数组就是一个仓库,其中每个元素是盒子,盒子里存放着声明里所规定类型的数据。数组元素一旦赋值,则其值一直不变,直到将它重新赋值。

以上我们对数组中的元素逐个赋值,每次赋值使用了一行代码。其实也可以在一行内完成数组的赋值。

int arr[] = {1, 2, 3};

int arr[3] = {1, 2, 3};

注意,定义数组的时候不需要指明它的长度,例如上面的第一种写法。当然,要一次性地将数组元素全部赋值,你需要知道每个数组元素的值,否则还是建议你使用我们最先提到的逐个赋值的方法。

接下来我们看一下在Arduino中如何声明数组。其实跟在Processing中是差不多的,在Arduino或C++里创建数组有下面三种方式:

int arr[] = {1, 2, 3};

int arr[3];

int array[3] = {1, 2, 3};

图2-4把数组分解成了几个部分。

image

图2-4:在C++中创建数组

Processing唯一不同于Arduino的是,Processing支持用new这个关键字创建数组。如果知道数组中所有元素的值,你可以这样写:

int array[3] = {1, 2, 3};

否则,你应该这样写:

int[] arr = new int[3];

我们已经掌握了数组的基础知识,现在可以去探讨一些较复杂的内容。首先我们来看看你必定会遇到的一些错误,例如各种各样的“越界访问”。越界访问就是指你访问了一个并不存在于数组中的元素。

在Arduino和C++里,数组可以这样初始化:

char arr[3] = {'a', 'b', 'c'}; char badArrayAccess = arr[3];

当你想使用变量badArrayAccess时,你会发现不仅它不是一个字符,而且访问它会导致程序崩溃。数组arr有3个变量,但现在你却试图访问它的第4个变量,与当初定义arr时所指定的数组长度不符。另一个常见错误则是把与数组类型不符的变量存放于数组中,例如:

char arr[3];// 字符型数组,含有3个变量float f = 2.3; arr[0] = f; // 糟糕!arr是字符型,所以“2.3”会自动变成“2” bool b = true; arr[1] = b; // 糟糕!arr是字符型,所以真值b会变成 “1”再赋值给arr[1]

编译平台不会对以上的代码报错,但结果是不对的,因为数组声明它所装载的元素是字符变量,而你却往里面放浮点型和布尔型变量,因此它们会被自动转化成字符型变量,后果经常难以控制和预测。表2-1对各个数据类型作了简明的比较,并列出在3种编程语言中的表示方式。

表2-1:数据类型比较
image

转载地址:http://bplvo.baihongyu.com/

你可能感兴趣的文章
js的发布/订阅模式
查看>>
Introduction To Neural Networks
查看>>
事件处理
查看>>
Android 中的 Service 全面总结(三)
查看>>
怎样利用strace调试
查看>>
AES
查看>>
shell脚本抓取用户存储quota写道mysql并展现到grafana面板
查看>>
关于docker的我自己的理解
查看>>
MySQL事务
查看>>
“网络安全”的含义
查看>>
How to write a good tech blog
查看>>
我的友情链接
查看>>
全球 ICT 50 强榜单:阿里、中兴上榜
查看>>
Windows系统运维转linux系统运维的经历
查看>>
iPhone之我见
查看>>
ASP.NET MVC 5 - 给数据模型添加校验器
查看>>
驾校春游烧烤
查看>>
Cassandra 中如何在opscenter中显示Performance Metrics 信息
查看>>
2016
查看>>
动态代理
查看>>