所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。
特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素。
一维数组:
格式:
类型 数组名[元素个数-常量表达式]
(1)数组名的命名方法与变量名相同,遵循标识符命名规则;
(2)数组是用方括号括起来的常量表达式,不能用圆括号;
(3)常量表达式表示数组元素的个数,即数组的长度,数组的下标从0开始,下标的最大值为:
常量表达式-1;
(4)常量表达式中可以包括常量和符号常量,不能包括变量。
可以用赋值语句或输入语句使数组中的元素得到值,但要占用运行时间。可以使数组在运行之前初始化,即在编译阶段使之得到初值。
初始化:
int buf[5] = {1,2,3,4,5};
这里把buf数组中的5个元素初始化为1,2,3,4,5
下标:
这里变量buf称为数组,因为它是一些值的集合,下标和数组名一起使用,用于标示该集合中的某个特定的值。例如buf[0]表示数组buf的第一个元素的值,这里值为1. buf[4]标示数组buf第5个值,这里值为5.
buf[0] //对应的值为1
buf[4] //对应的值为5
数组的下标从0开始计数
多维数组:
某个数组的维数不止1个,我们称这个数组为多维数组
格式:
数组[下标][下标]
在引用二维数组时,必须是单个元素,不能是整个数组名。下标可以是一个表达式,但不能是变量。如果下标是一个表达式,注意表达式的值不能超出数组定义的上、下限。
int num[3][5];
创建了一个包含15个元素的矩阵。我们一般把这个理解为3行5列,当然也可以理解为5行3列,为了我们方便记忆,我们看做为3行10列。
(1) 多维数组初始化1
static int num[3][5] ={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
以上赋值把第一个花括号内的数据赋给第一行元素,第二个花括号内数据赋给第二元素,以此类推,即按行赋值
(2) 可以将所有的数据写在一个花括号内,按数组排列的顺序对各元素赋值。
(3)可以对数组的部分元素赋初值。如:1
static int a[3][5] = {{1},{6},{11}};
以上赋值的结果是:数组第一列的元素分别赋了初值1,6,11,其余元素的值都是0。
(4)如果对二维数组的全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。
指针数组 &数组指针:
指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。
数组指针:首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。
例:
指针数组:
int num1[10];
“[]”的优先级比“”要高,num1先与“[]”结合,构成一个数组的定义,数组名为num1.int *修饰的是数组的内容,即数组的每个元素。那现在我们清楚,这是一个数组,其包含10 个指向int 类型数据的指针,即指针数组。
数组指针:
int (num2)[10];
在这里“()”的优先级比“[]”高,“”号和num2 构成一个指针的定义,指针变量名为num2,int 修饰的是数组的内容,即数组的每个元素。