数组用来表示一组数据的集合。使用数组,可以方便地定义一个名字(数组名)来表示大批量数据,并能够通过循环批处理大量数据。
一、定义
数组就是一组相同类型数据的集合。
一维数组的定义形式为:
元素类型 数组名 [常量表达式(数组包含的元素个数)];
int A[10];
int B[10], C[15]; //多个数组定义
int E[10], m, n, F[15]; //数组和变量混合在一起定义
(1)一维数组是由元素类型、数组名和长度(数组包含的元素个数)组成的构造类型。
int A[10], B[20]; // 元素是整型
double F1[8], F2[10]; //元素是双精度浮点型
char S1[80], S2[80]; //元素是字符型
(2)数组名必须符合C++标识符规则。
(3)常量表达式表示数组中元素的个数,称为数组长度。常量表达式的值必须为正整数且大于等于1。
(4)数组一经定义,数组长度就始终不变。
如:
int n;
cin>>n;
int a[n]; //错误!
二、内存形式
C++规定数组元素是连续存放的,即在内存中一个元素紧跟着一个元素线性排列。
三、一维数组的初始化
可以在一维数组定义时对它进行初始化,初始化的语法形式如下:
元素类型 数组名 [常量表达式]={初值列表};
int A[5]={1,2,3,4,5} , B[3]={7,8,9};
//一维数组初始化
(1)初值列表提供的元素个数不能超过数组长度,但可以小于数组长度。如果初值个数小于数组长度,则只初始化前面的数组元素, 剩余元素初始化为0。例如:
int A[5]={1,8,9};
(2)在提供了初值列表的前提下,数组定义时可以不用指定数组长度,编译器会根据初值个数自动确定数组的长度。例如:
int A[]={1,8,9};
可以用下面的表达式计算出数组A的长度:
(3)若数组未进行初始化,静态数组的元素均初始化为0;在函数体内定义的动态数组,其元素没有初始化,为一个随机值。
static int A[10]; //静态数组,默认各元素的值为0
int A[10]; //动态数组,各元素的值为随机数
四、一维数组的引用
数组必须先定义后使用,且只能逐个引用数组元素的值而不能一次引用整个数组全部元素的值。
数组元素引用是通过下标得到的,一般形式为:
数组名 [下标表达式]
(1)注意下标的表示形式
►下标表达式可以是常量、变量、表达式,但必须是正整数,不允许为负。
►数组元素下标总是从0开始。
int A[5]={1,2,3,4,5}, x,i=3;
x = A[2] ; //常量
A[i]++; //变量
A[1+2]=10; //表达式
(2)下标值不能超过数组长度,否则导致数组下标越界的严重错误。例如:
int A[5]={1,2,3,4,5};
A[5]=10; //错误,没有A[5]元素
(3)整个数组不允许进行赋值运算、算术运算等操作,只有元素才可以,例如:
int A[10], B[10], C[10];
A = B; //错误
A = B + C; //错误
A[0] = B[0]; //正确,数组元素赋值
A[2] = B[2]+C[2]; //正确,数组元素赋值
从数组的内存形式来看,数组元素的下标是有序递增的,这个特点使得可以利用循环来批量处理数组元素。
如:
对数组中的所有元素进行输入输出。
#include <iostream>
using namespace std;
int main() //一维数组的输入输出
{
int i, A[100];
for(i=0;i<100;i++) cin>>A[i];
for(i=100-1;i>=0;i--) cout<<A[i]<<" ";
return 0;
}
将一个一维数组的元素赋给另一个等长的一维数组。
#include <iostream>
int main()
{
int A[5]={1,2,3,4,5} , B[5] , i;
for (i=0; i<5; i++)
B[i] = A[i]; //元素一一复制
return 0;
}