1.一维数组。
数组是有序数据的集合。
1)类型名 数组名[常量表达式]
常量表达式的值表示元素的个数,即数组长度。
2)常量表达式中不能包含变量,即数组的大小不依赖于程序运行中变量的值,例如下面这个数组的定义是不行的:
“int n;cin >> n; int a[n];”
改为这样才合法:“const int n=5;int a[n];”
3)数组必须先定义后使用,只能逐个引用数组元素的值而不能一次引用整个数组全部元素的值。
4)初始化。使用数组时要根据要解决问题的形式决定数组是否要初始化。
初始化变量可以用以下的方法,如 int a[10]={ 0 };数组元素全部为零。
int b[5]={1,2};前两个元素为1和2,后续元素自动赋值为零。
特殊情况,如将数组在主函数外定义,自动赋初值。
5)越界问题
注意a[100]的下标为0-99,定义时最好定义大一些,通常比要用的多一个。
使用负数,非整数或大于99的数字都会是数组越界。
定义和引用二维数组
具有两个下标的数组称为二维数组。
格式
1. 数据类型 数组名[行数][列数];
2. 数据类型 数组名[行数][列数] = {{数据1,数据2},{数据3, 数据4}}
3. 数据类型 数组名[行数][列数] = {数据1, 数据2, 数据3, 数据4}
4. 数据类型 数组名[][列数] = {数据1, 数据2, 数据3, 数据4}
1)如 int a[3][4] ;
根据C++对二维数组的定义方式,可以将a看作一个一维数组,它有3个元素:a[1]、a[2]、a[3],每个元素又是一个包含着4个元素的一维数组。
2)初始化
a. 按行全部初始化:
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}
b. 直接全部初始化,此时第一维度可以省略,第二维度不能省略:
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}
int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12}
c. 对部分元素初始化,此时也是先给前边的元素赋值
int a[3][4] ={{1},{5},{9}}
对全部元素都赋值时,可以不用指定第一维的数组长度。
字符数组
用来存放字符数据的数组是字符数组,字符数组中的一个元素只能存放一个字符。
1)定义和初始化字符数组
一般形式为:char c[ ] = { ‘I’,’a’,’m’ } ; //逐个字符赋给数组中的各个元素
系统会自动根据初值个数确定数组长度。
2)用字符数组存放一个字符串中的字符
C++规定了一个“字符串结束标志”,以字符’\0’代表。字符’\0’前面的字符组成有效字符串。对一个字符串常量,系统会自动在所有字符的后面加一个’\0’作为结束符,然后存储到字符数组中。如果有效字符串为10个字符,在内存中它共占有11个字节。
现在我们可以补充一种方法来初始化字符数组:用字符串常量来初始化。
char str[ ] = “China” ;
这种初始化方式与 char str[ ] = { ‘C’,’h’,’i’,’n’,’a’,’\0’ } 等价。
3)字符数组的输入和输出
C++提供了cin流中的getline函数,用于读入一行字符(或一行字符中前若干个字符),使用安全又方便。
cin.getline(字符数组(或字符指针),字符个数n,终止标识符)
如:cin.getline(ch,20,'/')
作用是读入19个字符(或遇到'/'结束),然后用'\0'补够20个字符存放到字符数组ch中。
4)初始化
初始化过程中,没有被初始化的数组项编译器会给默认赋值’\0’;
(整数数组没有被初始化的数组项被赋值为0)
例如:char c[5] = {‘a’,’b’,’c’,’d’}; 中 c[4] = ‘\0’; \0即空字符
char c[5]="abcd"字符串初始化数组的话,
字符串后会跟一个空字符,所以字符串的元素数量要少于定义的空间。