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

本文共 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://yxtpx.baihongyu.com/

你可能感兴趣的文章
【socket编程】select manual page翻译
查看>>
【原创】本地用户无法登录vsftp的解决方法
查看>>
placeholder属性兼容js支持
查看>>
getServletContext()方法详解
查看>>
Unity3d的Sprite Packer用法介绍
查看>>
Caused by: java.sql.SQLException: ORA-24816: 在实际的 LONG 或 LOB 列之后提供了扩展的非 LONG 绑定数据...
查看>>
bash快捷建-光标移到行首、行尾等
查看>>
两行代码解决端口冲突
查看>>
set(集合)
查看>>
jquery学习之add()
查看>>
K-Anonymous Sequence
查看>>
ASP过滤HTML的通用函数
查看>>
Dojo 1.7 Release Notes翻译完成,包含若干重大更新
查看>>
关于org.slf4j.LoggerFactory
查看>>
如何解决WebBrowser.DocumentCompleted事件的多次调用
查看>>
JAVA_内部类
查看>>
UVa 10566 - Crossed Ladders 【二分】
查看>>
CF79D Password
查看>>
jxl 导入excel
查看>>
poj 2983 Is the Information Reliable? (差分约束)
查看>>