学学习网 手机版

学学习网

学习路径: 学习首页 > 应用开发 > c++ >

第五节 数组 (Arrays)(2)

设置字体:
----------------------------------

 
// arrays example
#include <iostream.h>

int billy [ ] = {16, 2, 77, 40, 12071};
int n, result=0;

int main () {
for ( n=0 ; n<5 ; n++ ) {
result += billy[n];
}

cout << result;
return 0;
}
12206
 
多维数组(Multidimensional Arrays
多维数组(Multidimensional Arrays)可以被描述为数组的数组。例如,一个2维数组(bidimensional array)可以被想象成一个有同一数据类型的2维表格。

jimmy 显示了一个整型(int )的3x5二维数组,声明这一数组的的方式是:
int jimmy [3][5];
而引用这一数组中第2列第4排元素的表达式为:jimmy[1][3]

(记住数组的索引总是从0开始)。
多维数组(Multidimensional arrays)并不局限于2维。如果需要,它可以有任意多维,虽然需要3维以上的时候并不多。但是考虑一下一个有很多维的数组所需要的内存空间,例如:
char century [100][365][24][60][60];
给一个世纪中的每一秒赋一个字符(char),那么就是多于30亿的字符!如果我们定义这样一个数组,需要消耗3000M的内存。
多维数组只是一个抽象的概念,因为我们只需要把各个索引的乘积放入一个简单的数组中就可以获得同样的结果。例如:
int jimmy [3][5]; 效果上等价于
int jimmy [15]; (3 * 5 = 15)
唯一的区别是编译器帮我们记住每一个想象中的维度的深度。下面的例子中我们就可以看到,两段代码一个使用2维数组,另一个使用简单数组,都获得同样的结果,即都在内存中开辟了一块叫做jimmy的空间,这个空间有15个连续地址位置,程序结束后都在相同的位置上存储了相同的数值,如后面图中所示:
// multidimensional array
#include <iostream.h>
#define WIDTH 5
#define HEIGHT 3

int jimmy [HEIGHT][WIDTH];
int n,m;

int main (){
for (n=0; n<HEIGHT; n++) {
for (m=0; m<WIDTH; m++)
jimmy[n][m]=(n+1)*(m+1);
}

return 0;
}
// pseudo-multidimensional array
#include <iostream.h>
#define WIDTH 5
#define HEIGHT 3

int jimmy [HEIGHT * WIDTH];
int n,m;

int main (){
for (n=0; n<HEIGHT; n++){
for (m=0; m<WIDTH; m++)
jimmy[n * WIDTH + m]=(n+1)*(m+1);
}
return 0;
}
上面两段代码并不向屏幕输出,但都向内存中的叫做jimmy的内存块存入如下数值:

我们用了宏定义常量(#define)来简化未来可能出现的程序修改,例如,如果我们决定将数组的纵向由3扩大到4,只需要将代码行:
#define HEIGHT 3
修改为 :
#define HEIGHT 4
而不需要对程序的其他部分作任何修改。
 
数组参数(Arrays as parameters
有时候我们需要将数组作为参数传给函数。在C++ 中将一整块内存中的数值作为参数完整的传递给一个函数是不可能的,即使是一个规整的数组也不可能,但是允许传递它的地址。它们的实际作用是一样的,但传递地址更快速有效。
要定义数组为参数,我们只需要在声明函数的时候指明参数数组的基本数据类型,一个标识后面再跟一对空括号[]就可以了。例如以下的函数:
void procedure (int arg[])
接受一个叫做arg的整型数组为参数。为了给这个函数传递一个按如下定义的数组:
int myarray [40];
其调用方式可写为:
procedure (myarray);
下面我们来看一个完整的例子:
// arrays as parameters
#include <iostream.h>

void printarray (int arg[ ], int length) {
for (int n=0; n<length; n++) {
cout << arg[n] << " ";
}
cout << "\n";
}

int main () {
int firstarray[ ] = {5, 10, 15};
int secondarray[ ] = {2, 4, 6, 8, 10};
printarray (firstarray,3);
printarray (secondarray,5);
return 0;
}
5 10 15
2 4 6 8 10
可以看到,函数的第一个参数(int arg[ ])接受任何整型数组为参数,不管其长度如何。因此,我们用了第2个参数来告知函数我们传给它的第一个参数数组的长度。这样函数中打印数组内容的for 循环才能知道需要检查的数组范围。
----------------------------------
课程列表
重点难点
赞助链接