C++——数组
一维数组
前言:
在前面的课程中其实已经学习过将数据通过等于号赋值到变量中,甚至还可以通过循环来实现多次重复地输入不同的数据到变量中,但是,从始至终,我们能存储下来的数据只有那几个变量而已,例如
int a,b,c; for(int i=1;i<=10000;i++) cin>>a>>b>>c;
可以看到,即便我们循环了10000次,每次都输入不同的数据存储到变量a,b,c中,最终当10000次循环结束后,也仅仅只有3个数据分别存储到了a,b,c中,很明显,在前面的9999次输入的近3万个数据都丢失了,如果我们想找到第10次循环输入的数据,我们因为不断的循环输入早就已经将之前输入的数据给覆盖了,所以无从查找,此时我们就得使用到一种新的数据类型:数组
int a[10001],b[10001],c[10001]; for(int i=1;i<=10000;i++) cin>>a[i]>>b[i]>>c[i];
我们在变量名a的后面加上[10001]就从原来的整型变量a变成了整型数组a,并且这个a数组中有10001个元素组成,在计算机的内存里是共占据了10001个连续的内存单元,而我们就可以利用for循环中的i是从1到10000的性质,我们可以通过a[i]的方式把输入的数据存储在a数组中的第i个单元中,这样在输入完后我们还想找出第10次循环输入的数据时,我们就可以这样子:
int a[10001],b[10001],c[10001]; for(int i=1;i<=10000;i++) cin>>a[i]>>b[i]>>c[i]; cout<<a[10]<<endl;
一维数组的定义
数组的定义格式如下:
类型标识符 数组名[常量表达式]
说明:
1.数组名的命名规则和变量的命名规则一致
2.常量表达式表示数组元素的个数。可以是常量和符合常量,但不能是变量
例如:
int a[10]; //数组a定义是合法的,共有10个元素 int b[n]; //数组b定义是非法的,因为里面的n是个变量,不是常量
一维数组的引用
通过给出的数组名称和这个元素在数组的位置编号(即下标),程序可以引用这个数组中的任何一个元素
注意:下标是从0开始的
一维数组元素的引用格式:
数组名[下标]
例如:若i,j都是int型变量,则:
a[5] a[i+j] a[i++] //都是合法的元素
说明:
1.下标可以是任意值为整型的表达式,该表达式里可以包含变量和函数调用。引用时,下标值应在数组定义的下标值范围内。
2.数组的精妙在于下标可以是变量,通过对下标变量值的灵活控制,达到灵活处理数组元素的目的
3.C++语言只能逐个引用,不能一次引用整个数组
例如:int a[100],b[100];a = b;这样子将整个b数组赋值给a数组是非法的
4.数组元素可以像同类型的普通变量那样使用,对其进行赋值和运算的操作,和普通变量完全相同
例如:c[10] = 34 实现了给c[10]赋值为34
一维数组的初始化
类型的初始化可以在定义时一并完成。格式:
类型标识符 数组名[常量表达式] = {值1,值2...}
例如:
int a[8] = {0,1,2,5,10,20,50,100};
说明:
1.在初始化列表中可以写出全部数组元素的值,也可以写出部分。例如,以下方式可以对数值进行初始化
int a[8] = {0,1,2,5};
该方法仅对数组的前4个元素依次初始化,其余没有初始化的值为0
2.对数组元素全部初始化为0,可以简写为:{}
例如:
int a[8] = {};
将数组a的5个元素都初始化为0
以下给出三个程序,大家可以观察程序数组的变化
#include<bits/stdc++.h> using namespace std; int a[5]; int main() { for(int i=0;i<5;i++) //下标从0开始 cout<<a[i]<<" "; return 0; }
运行结果:
0 0 0 0 0
#include<bits/stdc++.h> using namespace std; int main() { int a[5]; for(int i=0;i<5;i++) //下标从0开始 cout<<a[i]<<" "; return 0; } 运行结果: 0 0 20 0 0
#include<bits/stdc++.h> using namespace std; int main() { int a[5] = {1,2}; for(int i=0;i<5;i++) //下标从0开始 cout<<a[i]<<" "; return 0; } 运行结果: 1 2 0 0 0
说明:程序1的数组定义是在主函数int main()外面,在int main()外面定义的数组初始值都为0,程序2是在int main()之内,初始值是随机的,所以输出里面并非全是0,程序3定义在int main()之内,但是因为对前两个元素进行了赋值,所以除了前两个元素是1,2剩余的3个元素都是自动赋值为0
数组越界
使用数组时要注意:
1.数组的元素下标值必须为非负数
2.在定义元素个数的下标范围内使用
然而,当在程序中把下标写成负数、大于数组元素的个数时,程序编译的时候是不会出错的,因为它们从语法上来说是正确的,不过因为数组中并不存在这个下标的元素,所以这种情况被成为数组越界,所以在写程序的时候,一定要注意以上两点容易造成数组越界的情况千万不要出现