4、 数组
4.1 一维数组的定义、初始化和访问
定义一维数组
类型名 数组名[常量表达式];
(1)常量表达式的值表示元素的个数,即数组长度,下标从0开始。
(2)常量表达式中不能包含变量,不允许对数组的大小做动态定义。
一维数组的初始化
(1)在定义数组时对全部数组元素赋予初值
int a[3]={1,2,3};
(2)可以只给一部分元素赋值
int a[5]={1,2,3};//其余默认为0
(3)在对全部数组元素赋初值时,可以不指定数组长度
int a[]={1,2,3}//此时系统自动定义数组长度为3
引用一维数组的元素
数组必须先定义然后使用。只能逐个引用数组元素的值而不能一次引用整个数组中的全部元素的值。
数组名[下标]
4.2 二维数组的定义、初始化和访问
定义二维数组
类型名 数组名[常量表达式][常量表达式];
二维数组中元素排列的顺序是:按行存放
二维数组的初始化
(1)按行给二维数组全部元素赋初值
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
(2)可以将所有数据写在一个花括号内,按数组排列的顺序对全部元素赋初值
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
(3)可以对部分元素赋初值
只对各行的的一个元素赋初值,其余默认为0
int a[3][4]={{1},{5},{9}};
对各行中的某一元素赋初值
int a[3][4]={{1},{0,6},{0,0,11}};
只对某几行元素赋初值
int a[3][4]={{1},{5,6}};
(4)如果对全部元素都赋初值,则定义数组对第1维的长度可以不指定,但第2维的长度不能省。
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};
引用二维数组的元素
数组名[下标][下标]
注意,定义a[3][4]时,下标值最大a[2][3]。
4.3 用数组作为函数参数
数组名也可以作实参和形参,传递的是数组的起始地址。
1、用数组元素作函数实参
将数组元素的值传送给形参变量
int max(int x,int a){}
int main(){
int a[2][3]={.....};
max(a[0][2],a[1][2]);
}
2、用数组名作函数参数
void select(int array[],int n){}
int main(){
int a[10]={.....};
select(a,10);
}
(1)如果函数实参是数组名,形参也应为数组名(或指针变量)
(2)数组名代表数组首元素的地址,并不代表数组中的全部元素
(3)用数组名作函数实参时,如果改变了形参数组元素的值将同时改变实参数组元素值
4.4字符串和字符数组
定义和初始化字符数组
char c[5]={'a','b','c','d'};//最后一个默认为空字符'\0'
字符串和字符串结束标志
用一个字符数组可以存放一个字符串中的字符
char str[12]={'I',' ','a','m',' ','h','a','p','p','y'};//最后两个元素自动填补'\0'
人们关心的往往是字符数组中有效字符串的长度,为了测定字符数组中字符串的实际长度,C++规定了一个“字符串结束标志”,以字符’\0’代表。
也就是说,遇到字符’\0’就表示字符串到此结束,由它前面的字符组成有效字符串。
在程序中往往依靠检测’\0’的位置来判定字符串是否结束,而不是根据数组的长度来决定。
因此在执行cout输出流时,遇到’\0’就停止。
可以用字符串常量来初始化字符数组
char str[ ]={"I am happy"};
或省略花括号
char str[ ]="I am happy";
注意字符串的两端是双引号
此时数组str的长度不是10,而是11,因为字符串常量最后系统自动加上'\0'
因此与下面等价
char str[ ]={'I',' ','a','m',' ','h','a','p','p','y','\0'};
但与下面不等价
char str[ ]={'I',' ','a','m',' ','h','a','p','p','y'};
字符数组的输入输出
1、逐个字符输入输出
2、将整个字符串一次输入或输出
(1)输出的字符不包括结束符’\0’
(2)输出字符串时,cout流中用字符数组名,而不是数组元素名
char str[20];
cin>>str;//用字符数组名输入字符串
cout<<str;//正确
(3)如果数组长度大于字符串实际长度,输出遇’\0’结束
(4)如果一个字符数组包含一个以上’\0’,则遇第一个’\0’就结束
(5)用cin输入一个字符串时,从键盘输入的字符串应短于已定义的字符数组长度
4.5 字符串函数
字符串连接函数strcat
char str1[30]="People's Republic of ";//为了连接后美观,of后有一个空格
char str2[ ]="China";
cout<<strcat(str1,str2);
输出:People's Republic of China
字符串赋值函数strcpy
char str1[10]="China";
char str2[];
strcpy(str2,str1);//将5个字符China和'\0'共六个字符复制给str2
strcpy(str2,str1,2)//将前2个字符Ch复制给str2,再加一个'\0'
字符串比较函数strcmp
strcmp(str1,str2);
strcmp("china","korea");
ctrcmp(str1,"china");
(1)相等返回0
(2)前 > 后,返回正整数
(3)前 < 后,返回负整数
字符串长度函数strlen
char str1[10]="China";
cout<<strlen(str1);
输出5,不包括'\0'在内