数组(aaray)是一种数据格式,能够存储多个同类型的值。比如能存60个int,或者12个short,365个float(那能存更多的int或者short么?还是这只是举例?)。每个值都存储在一个独立的数组元素中,计算机在内存中依次存储数组的各个元素。
创建数组,类似要做int a之类的声明,数组的声明应指出以下三点:
①存储在每个元素中的值的类型;(应该是比如说第一个是int,第二个是float之类吧)
②数组名;(类似变量名)
③数组中的元素数。(就是有多少个值)
举例:int shuxing[5]; 就是指在数组shuxing 中,有五个值,他们都是int类型
通用格式如下:
类型名 数组名[数组值的个数];
其中,数组值的个数需要是整型常数,或者常量(例如被const限制的常量const a=10;),也可以是常量表达式。总之,要是一个固定的数字,不能是变量。
数组的类型:
比如说int abc[10]; 则数组abc的类型是int数组,而不是数组。
数组的排列:
比如说一个数组10个值,int abc[10]; 数组排列方式是从0开始的。那么数组abc第一个数的表示方法是abc[0],第十个数的表示方法是abc[9],第N个数的表示方法为abc[N-1]。
另外,可以单独访问数组中的某一个数,例如上面abc数组第4个数的访问方法就是abc[3]
注意:第n个数在表示的时候,括号里不是n,是n-1
数组的声明:
方法一:
int abc[3]; //按照说明,有可能出现无法编译的情况。如果出现这种情况的话,可以使用以下来替代: //static int abc[3]; abc[0] = 1; abc[1] = 4; abc[2] = 7;
方法二:
int abc[3] = { 1,4,7 };
这两个方法是等价的。
上代码:
#include <iostream> int main() { using namespace std; int shuliang[3] = { 1,3,5 }; //声明方法一,数组中每个值都是int int jiage[3]; //声明方法二,数组中每个值都是int jiage[0] = 2; //第一个数的编号为0 jiage[1] = 3; //第二个数的编号为1 jiage[2] = 4; //第三个数的编号为2 int zongjia = shuliang[0] * jiage[0] + shuliang[1] * jiage[1] + shuliang[2] * jiage[2]; //不同数组中的值相乘相加的方法,类似多个变量之间相乘相加。 cout << "我们要买铅笔,钢笔,签字笔。\n"; cout << "铅笔的数量为:" << shuliang[0] << "支。钢笔为:" << shuliang[1] << "支。签字笔为" << shuliang[2] << "支。" << endl; cout << "他们的价格分别为(元/支):" << jiage[0] << "," << jiage[1] << "," << jiage[2] << ".\n"; cout << "我们总共要买 " << shuliang[0] + shuliang[1] + shuliang[2] << " 支笔。" << endl; //数组内的值相加的方法,类似变量相加 cout << "总价为: " << zongjia << " 元。" << endl; cout << endl; cout << "价格数组的字节长度为 " << sizeof jiage << " 个字节\n"; cout << "铅笔价格的字节长度为 " << sizeof jiage[0] << " 个字节" << endl; system("pause"); return 0; }
输出结果:
我们要买铅笔,钢笔,签字笔。 铅笔的数量为:1支。钢笔为:3支。签字笔为5支。 他们的价格分别为(元/支):2,3,4. 我们总共要买 9 支笔。 总价为: 31 元。 价格数组的字节长度为 12 个字节 铅笔价格的字节长度为 4 个字节
注:在上面那个代码中,jiage和shuliang在直接使用的时候,都是一个数组,而jiage[0]是一个int变量(因为数组在声明的时候用的int)。这两个并不同。
数组的初始化:
数组在初始化时,是有要求的。例如以下五行代码,有的可以,有的就不可以。
再上代码:
int aaa[3] = { 1,3,5 }; //这是可以用的~ int bbb[3]; //这也是可以用的~ bbb[3] = { 1,2,3 }; //这是错误的。编译器认为后面是给bbb数组中第4个变量赋值(实际上没第4个,也不能这么赋值),而非给数组bbb中的三个数赋值 bbb[3] = aaa[3]; //错误,这并非将一个数组的值赋值给另外一个数组,而是将aaa数组中第四个数赋值给bbb数组中第四个数。 bbb = aaa; //错误,不能直接将一根数组的值赋值给另外一个数组。
另外,在初始化的时候,可以不用给所有数组中的值进行赋值,没有赋值的数组中的数,被认为是0。
上代码:
#include <iostream> int main() { using namespace std; int aaa[5] = { 0 }; //在这行代码中,数组aaa中第一个数的值为0,没有被赋值的后面4个数的值为0 int bbb[3] = { 1,2 }; //在这行代码中,数组bbb中第一个数为1,第二个数为2,没有被赋值的第三个数为0 int ccc[5] = {}; //在这行代码中,数组ccc中五个没有被赋值的数的值都为0 int ddd[] = { 1,3,5 }; //在这行代码中,数组ddd一共有3个数(即等同于int ddd[3]={1,3,5};) int ggg[3]{ 1,3,5 }; //不用等号也是可以的。 cout << "数组aaa第四个数为:" << aaa[3] << endl; cout << "数组bbb第三个数为:" << bbb[2] << endl; cout << "数组ccc第一个数为:" << ccc[0] << endl; cout << "数组ddd第三个数为:" << ddd[2] << endl; cout << "数组ggg第二个数为:" << ggg[1] << endl; cout << "以下数字显示异常,是因为超出数组范围,比如数组中只有三个数,要显示第四个数" << endl; cout << "数组bbb(声明的时候只有三个数)第四个数为:" << bbb[3] << endl; system("pause"); return 0; }
输出结果为:
数组aaa第四个数为:0 数组bbb第三个数为:0 数组ccc第一个数为:0 数组ddd第三个数为:5 数组ggg第二个数为:3 以下数字显示异常,是因为超出数组范围,比如数组中只有三个数,要显示第四个数 数组bbb(声明的时候只有三个数)第四个数为:-858993460
总之:
①如果要一次初始化多个数,只能在声明数组的时候进行初始化才行,否则要逐个进行初始化;
②初始化数组的时候,没有进行初始化的数,默认为0;
③不能将一个数组中所有数直接复制给另外一个数组中的数;
④数组中的数,使用方法类似变量名的使用方法,只不过需要声明使用的是数组中的第几个数,第N个则在中括号里的数字为N-1。
⑤不要将浮点类型的值在初始化声明的时候,赋值给数组中的数。例如int abc[3]={1,2,3.0};这种是错误的。
另外,按照说明,一般不要让编译器计算数组中元素的个数(即值的个数),因为可能你自己在输入的时候漏掉一个或者几个数,这就麻烦了。但是这种方法,对于将字符数组初始化为一个字符串来说比较安全(现在还不明白)。
再另外,可以用sizeof来确认你数组中的元素数是否如你计划中的数量。比如int变量,一个是4字节,如果你数组中有5个数,那么sizeof数组应该为20个字节。