首先要知道什么是数组,简单讲就是有序数据的集合,数组就是用一个统一的名字代表这批数据,然后用序号或者下标来区分各个数据
- 定义一维数组
一般形式:类型名 数组名[常量表达式],例如:int a[10]; 表明数组名为a,此数组为整型,有10个元素
1. 用方括号括起来的 常量表达式表示下标值,以下写法合法
int a[10];
int a[2*5];
in a[n*3];//假设前面已经定义了n为常变量
2. 常量表达式的值表示元素的个数,即数组长度
注:a[10]表示数组有10个元素,但是数组下标从0开始,也就是说最后一个元素是a[9]
3. 常量表达式中可以包括常量、常变量和符号常量但不能包括变量,也就是说不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值
int n;
cin>>n;
int a[n];
此时试图根据n的值决定数组的长度,不合法。
数组必须先定义再使用且只能逐个引用数组元素的值而不能一次引用整个数组中的全部元素的值。
- 一维数组的初始化
初始化方法:
1. 在定义数组时对全部数组元素赋初值
int a[4]={0,1,2,3};
2. 可以只给一部分元素赋值
int a[10]={0,1,2,3,4};//给前面五个元素赋初值,后5个元素默认为0
3. 在对全部元素赋初值时可以不指定其数组长度
int a[]={1,2,3,4,5,6};
定义二维数组:
一般形式:
类型名 数组名[常量表达式][常量表达式]
float a[0][4],b[5][10]
数值元素是左值,可以出现在表达式中,也可以被赋值
b[1][2]=a[2][3]/2;
二维数组的初始化
初始化方法:
- 按行给二维数组全部赋初值
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
- 可以将所有数据写在一个花括号内,按数组排列的顺序对全部元素赋初值
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
- 可以对部分元素赋值
int a[3][4]={{1},{5},{9}};
数组名可以作实参和形参,传递的是数组的起始地址
- 用数组元素作函数实参,数组元素可以作为函数的实参,与用变量作实参一样,将数组元素的值传送给形参变量
- 用数组名作函数参数
1.如果函数实参是数组名,形参也应为数组名
2.数组名代表的是数组首元素的地址,并不能代表数组中的全部元素
注:实参的值不因形参的值改变而改变
3. c++实际上只是把形参数组名作为一个指针变量来处理,用来接收从实参传过来的地址
字符数组
定义字符数组方式与定义普通数组方式类似
注:字符数组中遇到’\0’则表示字符串到此结束,由它前面的字符串组成有效字符串,在程序中往往根据’\0’的位置来判断字符串是否结束而不是根据数组的长度来决定字符长度
- 可以用字符串常量来初始化数组
char str[]={"I am DaoZhang"};
char str[]="I am DaoZhang";//可以这样写
字符数组的输入输出
char str[20];
cin>>str;//输入
cout<<str;//输出
注:
- 输出的字符不包括结束符’\0’
- 输出字符串时,cout流中用字符数组名,而不是数组元素名
- 如果数组长度大于字符串实际长度,输出遇’\0’结束
- 若一个字符串有一个以上’\0’,遇第一个’\0’时输出结束
- 用cin从键盘向计算机输入一个字符串时,输入的字符串应该短于已经定义的字符数组的长度,否则会出问题