数组是同类型变量的集合,这些同类型的变量称为数组元素。常见的有一维数组、二维数组、字符数组及字符串数组。在结构化程序设计时,使用数组可以有效地组织循环,从而在编写程序时,使算法设计和代码编写大为简化。
1.一维数组
(1)定义
定义格式如下:
类型说明符 数组名[维界表达式];
数组元素的使用:
数组名[下标]
说明:
① 数组的类型,实际上是数组所有元素的取值类型。
② 数组名的命名规则和变量相同,要遵循标识符的书写规则。
③ 维界表达式的值,表示数组元素的个数,即数组长度;一维数组存储在一片连续的内存单元中;维界表达式可以包含常量和符号常量,不能包含变量。
④ 数组元素的下标从0开始。数组的最后一个元素的下标为数组长度减1。如果数组下标大于数组长度,就会越界。例如:
int a[10];
它表示名为a的长度为10的一维整型数组,其10个元素的下标从0开始,这10个元素是a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。没有数组元素a[10],否则就越界了。
⑤允许一个类型同时定义多个该类型的数组和变量,例如:
float b[5+3],c[14],x ,y;
表示名为b的一维实型数组有8个元素,名为c的一维实型数组有14个元素,名为x和y的两个实型变量。
⑥ 对定义的数组(含一维数组、二维数组及字符数组等),要给其赋初值。如果不给数组赋初值,系统默认数组各个元素的初始值是毫无意义的随机值。
(2)一维数组初始化
数组初始化就是给定义的数组元素赋初始值。数组初始化的常用方法如下:
① 在定义数组时对数组元素赋初值。初值放在一对花括号中各初值之间用逗号隔开。例如:
int data[5]={1,2,3,4,5};
表示名为data的一维整型数组有5个元素,这5个元素data[0],data[1],…,data[4]的初始值依次为1,2,3,4,5 。
② 只对数组中的部分元素赋初值,例如:
int num[10]={2,4,6,8};
表示名为num的一维整型数组有10个元素,只给前面的4个元素num[0],num[1],num[2],num[3]依次赋初值2,4,6,8,其他6个元素的默认值为0。
③ 如果对数组的所有元素赋初值时,可以不指定数组的长度,例如:
int s[ ]={1,3,5,7,9,11,13,15};
表示名为s的一维整型数组,系统自动指定其长度为8,并自动给这8个元素s[0],s[1],s[2],s[3],s[4],s[5],s[6],s[7],依次赋值1,3,5,7,9,11,13,15。
2.二维数组(
1)定义
定义格式如下:
类型说明符 数组名[维界表达式1][ 维界表达式2];
数组元素的使用:
数组名[行下标] [列下标]
说明:
① 二维数组的类型说明符、数组名都与一维数组的规定相同。不同的是用两个方括号表示数组的下标,维界表达式1表示二维数组的行下标,维界表达式2表示二维数组的列下标。例如:
int k[2][3];
表示名为k的二维数组,有2行3列共6个数组元素。
② 可以把二维数组看作是一种特殊的一维数组,这个数组的每个元素又是一个一维数组。例如:
可以把数组k看作有两个元素k[0],k[1]的一维数组。其中,每个元素又包含3个元素。即:
k[0]包含k[0][0],k[0][1],k[0][2]
k[1]包含k[1][0],k[1][1],k[1][2]
③ 二维数组的存储
二维数组的元素在内存中按行存放,即先顺序存放第一行的元素,再存放第二行的元素,依次类推。
(2)二维数组初始化
给定义的二维数组赋初值,称为二维数组初始化。常用以下方法:
① 采用分行方式给二维数组赋初值。将每行数据写在一个花括号中,行与行之间用逗号隔开,所有行再用一个外层花括号括起来。例如:
int array[2][3]={{1,2,3}, {4,5,6}}; //数组array有2行3列这种方法是用两个花括号表示两行元素的值。每行中,将内层花括号中的值依次赋给每一行的具体元素。即第一行元素的值依次为array[0][0]=1,array[0][1]=2,array[0][2]=3;第二行元素的值依次为array[1][0]=4,array[1][1]=5,array[1][2]=6。
② 按二维数组的存储顺序给各元素赋初值。将所有数据写在一个花括号中,按行优先的顺序依次对数组各个元素赋初值。例如:
int score[3][3]={1,2,3,4,5,6,7,8,9}; //数组score有3行3列
赋值后,score[0][0]=1,score[0][1]=2,score[0][2]=3,score[1][0]=4,score[1][1]=5,score[1][2]=6,score[2][0]=7,score[2][1]=8,score[2][2]=9。
③ 只给二维数组的部分元素赋初值,这时也要采用分行方式。例如:
int sum[3][3]={{1}, {4}, {7}}; //只给各行的第一列元素赋初值(www.xing528.com)
赋值后,sum[0][0]= 1,sum[1][0]=4,sum[2][0]=7,默认其余元素的值都为0。
④ 对数组的全部元素赋值时,可以不指定数组第一维元素的长度,但是第二维元素的长度必须指定。例如:
int aver[ ][3]={2,4,6,8,10,12,14,16,18}; //每行3列,默认为3行
系统会根据数组元素的个数和第二维的长度,确定第一维的长度为3。
3.字符串与字符数组
(1)字符串
C语言中字符串常量是一对双引号括起来的一串字符,在表示字符串常量时,不需要人为地在其末尾加入‘\0’,C编译程序会自动在末尾添加字符‘\0’。例如,“english”,“I have a book”,“How are you”都是字符串常量。
C语言中字符串常量给出的是地址值,字符串常量在内存中的存放形式是按字符串中字符的排列次序顺序存放,每个字符占一个字节,并在末尾添加‘\0’作为结束标志。字符串常量是字符串在内存中所占的一串连续存储单元的首地址。
C语言中没有字符串变量,所以使用字符数组来存放和处理字符串。其中,一维字符数组可以存放一个字符串,二维字符数组可以存放多个字符串。
(2)字符数组
① 字符数组的定义
字符数组的定义格式如下:
char 数组名[维界表达式]; //一维字符数组
char 数组名[维界表达式1][ 维界表达式2]; //二维字符数组
数组元素的使用:
数组名[下标] //一维数组元素
数组名[行下标] [列下标] //二维数组元素
说明:
● 在定义一维字符数组时,“维界表达式”的值表示字符数组的长度。该值应该比它将要实际存放的字符串的长度多1,以便用来存放字符串结束标志‘\0’。
● 在定义二维字符数组时,“维界表达式1”的值,表示存放字符串的个数;“维界表达式2”的值,表示所存放的最长字符串的长度,该值应该比将要存放的多个字符串中的最长字符串所包含的字符个数多1。这样就要多出一个元素,以便用来存放这个最长字符串的结束标志‘\0’。
例如:
char ch[5], name[3][6] ;
定义数组名为ch的一维字符数组和名为name的二维字符数组。
字符数组ch的长度为5,可以存放的字符串长度最大值为4。即字符数组ch包含ch[0],ch[1],ch[2],ch[3],ch[4] 五个元素。如果将字符串“love”存放到字符数组ch中,则前4个元素依次存放单字符‘l’,‘o’,‘v’,‘e’,第五个元素ch[4]存放‘\0’。
字符数组name包含以下18个元素:
name[0][0] name[0][1] name[0][2] name[0][3] name[0][4] name[0][5]
name[1][0] name[1][1] name[1][2] name[1][3] name[1][4] name[1][5]
name[2][0] name[2][1] name[2][2] name[2][3] name[2][4] name[2][5]
二维字符数组name可以看作是包含name [0],name[1],name[2]三个元素的一维数组,而这三个元素又分别是包含6个元素的一维字符数组。所以字符数组name可以存放三个字符串,每个字符串长度最大值为5。有时也称二维字符数组为字符串数组。
② 字符数组具有普通数组的一般性质,详见一维、二维数组的知识点。
(3)字符数组的初始化
所谓字符数组的初始化,就是要给定义的字符数组赋初值。常用的赋值方法是在定义字符数组的同时给数组赋初值;也可以先定义字符数组,然后再给字符数组元素赋值。
① 使用字符常量给字符数组中的各个元素赋初值。
例如:
char s1[ 8]={'s', 't', 'u', 'd', 'e', 'n', 't', '\0'}; //数组s1的长度为8,字符串长度为7
字符个数( 含‘\0’)可以小于或等于数组的长度,但不能大于数组的长度。如果小于数组长度,剩余的元素自动赋值为空字符,即‘\0’。
② 使用字符串常量给字符数组赋初值。
例如:char s2[ 8]={"student"}; //字符串长度为7,字符数组长度为8
将字符数组s2的前7个元素依次赋值,最后一个元素s2[7]的值默认为‘\0’。
数组初始化时,可以不定义数组的大小,由系统自动给出,
例如:
二维字符数组s4可以看作是由两个元素s4[0]、s4[1]组成的一维数组,而s4[0]是存放字符串“max”的数组,s4[1]是存放字符串“min”的数组。
③ 给字符数组元素逐个赋字符值,最后人为地加入字符串结束标志‘\0’。
例如:
注意:
当作字符串变量使用的字符数组初始化时,不能将字符串常量直接赋给数组名。
例如:
char ss[8];
ss="teacher"; //错误的赋值
这种赋值形式是不允许的。因为字符串常量给出的是地址值,数组名ss是一个地址常量,不能被重新赋值。
(4)字符串数组
所谓字符串数组就是数组中的每个元素又都是一个存放字符串的一维数组。实现这一结构的代表是二维字符数组。即一个二维字符数组可以看作是一个一维数组,这个一维数组中的每一个元素又是一个存放字符串的一维数组。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。