首页 理论教育C语言基础:一维数组的定义与元素引用

C语言基础:一维数组的定义与元素引用

【摘要】:,常数n};例如:int a1[5]={1,2,3,4,5};一维数组的初始化可以用以下方法实现:①数组初始化时,给出全部数组元素的初始值。②输出数组元素值。

一维数组是指只用一个下标就可以引用其元素的数组,数组中的元素都具有相同的数据类型。在C程序中,数组使用前必须先定义,定义中指定数组的数据类型、名字、维数以及各维的长度

1.一维数组的定义

定义一维数组的一般形式:

数据类型符数组名[常量表达式];

其中,数据类型指定数组元素的数据类型,可以是基本数据类型,也可以是构造数据类型;方括号是定义数组的标志,其中的常量表达式用于指定数组的长度,即数组中数组元素的个数。例如,int score[10];定义了由10个数据类型为整型的数组元素组成的一维数组score。

定义数组必须注意以下几点:

①数组名的命名必须符合C语言关于标识符的书写规定,同时数组名也是变量,因此在定义数组时,数组的名字不能与同一范围内已经定义的其他变量名字相同。

②定义数组时,不能用变量来表示数组的长度(注:在C99标准中可以用变量表示数组长度),但是可以用符号常数或常量表达式。下面是一组用于比较的定义形式:

③可以在一个语句中定义若干个相同数据类型(维数可以不同)的数组,也可以在定义数组的同时定义同数据类型的其他变量。例如,int a1[10],a2[40],x,y;同时定义了整型数组a1、a2以及整型变量x和y。

④若有需要,可以定义全局(外部)数组或静态数组。若定义了全局或者静态数组,在没有显示初始化的情况下,数组全部元素的初始值为0。例如:

static double score[50];//定义长度为50的双精度实型静态数组

一维数组在存储时需要占用连续的内存空间,数组名代表数组存储区的首地址,数组在系统内存中按其下标的顺序连续存储元素值。数组的下标值规定为从0开始到指定长度的数减1为止。假定数组int a[10];在内存中的起始地址为4 000,数组a在存储器中的映像如图6.1所示,其每一个数据元素所占用的字节长度与它们的数据类型相关。

图6.1 数组a在存储器中的映像

在32位系统中,每个整型数据占用4个字节。若有以下数组定义:

int a[10];

则长度为10的整型数组a占用的内存空间长度为40个字节。

一个数组所占用的内存空间长度可以使用两种方法之一来获取:

·使用sizeof(数组名)。例如,sizeof(a);。

·使用数组长度*sizeof(数组类型名)。例如,10*sizeof(int);。

2.一维数组的初始化

C语言允许在定义数组的同时进行初始化,一维数组初始化的一般形式如下:

数据类型符数组名[常量表达式]={常数1,常数2,…,常数n};

例如:int a1[5]={1,2,3,4,5};

一维数组的初始化可以用以下方法实现:

①数组初始化时,给出全部数组元素的初始值。例如:

int a1[5]={-10,20,28,-1,88};

float b[3]={2.18,3.14,89.0};

②数组初始化时,给出部分数组元素的初始值,此时未初始化元素值为0(字符类为'\0')。例如:

int a2[10]={1,2,3,4,5};//a2的后5个数组元素的值均为0

int a3[10]={0};//a3中所有数组元素的值均为0

③数组初始化时未指定数组的长度,则以初始化数值的个数作为数组的长度,或者说如果在初始化时给出了全部的数组元素初始值,可以不指定数组的长度。例如:

int a4[]={1,2,3,4,5,6,7,8,9,10};//a4的长度为10

3.一维数组元素的引用方法

C语言规定,一般情况下数组不能作为一个整体参加数据处理,而只能通过处理每一个数组元素(下标变量)达到处理数组的目的。数组元素的表示形式为:

数组名[下标]

其中,下标就是数组元素在数组中的位置序号,可以是整型常数或表达式。若下标是实型数据,系统会自动将其取整。例如,若有定义语句:int a[5];,表示定义了有5个元素的数组a,这5个元素分别为a[0]、a[1]、a[2]、a[3]、a[4]。

在使用一维数组时还需要注意以下几点:(www.chuimin.cn)

①C语言不提供数组下标越界的保护。定义数组时用到的“数组名[整型常量表达式]”和引用数组元素时用到的“数组名[下标]”是有区别的。

如定义数组int a[5];表示只能有效引用a[0]、a[1]、…、a[4]这5个元素。如果程序中出现c=a[5];或d=a[8]+5;之类的引用时,C语言的编译系统不会给出错误提示,程序也可以运行,但其结果是不可预料的,甚至会产生严重的后果。

②每个数组元素与其他基本类型变量一样有自己的地址,并用“&”符号获取。

③C语言规定:每个数组元素只能逐个引用,而不能一次引用整个数组。

④引用数组元素之前,必须确保数组元素已经被赋值,否则得到的是一个不确定的值。例如,若有定义语句:int a[3];,可以通过赋值语句来对每个数组元素赋值,a[0]=1;a[1]=3;a[2]=259;确保每个数组元素有值。

⑤数组元素与它同类型的一般变量(简单变量)的用法相同。

4.一维数组的基本操作

对于一维数组,可以像普通变量一样对其任一元素进行处理,当需要数组中所有元素参与运算时,则使用一重循环的形式进行处理。

设有定义语句:int a[10],i;,下面展示了一维数组常见处理的代码段:

①输入数组元素值。

②输出数组元素值。

for(i=0;i<10;i++)

③求数组元素的最小值min。

④求数组元素的最小值下标mini。

⑤求数组元素的最大值max和最大值下标maxi。

⑥求数组元素的和sum。

【例6.1】 将一个整型数组中所有元素值在同一个数组中按逆序重新存放并输出。

程序中,用整型变量i和j分别表示要交换元素的位置,初始时i表示第一个元素的位置,j表示最后一个元素的位置。实现一次交换后用i++将i指向下一个欲交换的元素,用j--将j指向前一个欲交换的元素,只要满足条件i<j就进行对应元素值的交换;反复进行上述操作直至满足条件i>=j中止循环。程序一次运行情况如下所示:

请输入10个整数:

【例6.2】 编写程序使用一维数组打印如下所示的杨辉三角形前10行。

例6.2程序中,为了简化对应关系(避免使用0号元素对应第一个数据)使用了一个11个元素的数组进行处理。程序中反复利用同一个一维数组处理杨辉三角形,所以每生成一行杨辉三角形的元素值后立即将该行值输出。对每一行杨辉三角形值的具体处理方法为:首先用表达式yh[row]=1将该行数据的最后一个置1,然后从后向前依次在循环条件满足的情况下执行表达式:yh[col]=yh[col]+yh[col-1],该表达式的意思是将一维数组yh上一次当前位置元素值与其前面一个位置上一次的元素值相加作为本次当前位置上的元素值,图6.2展示了通过第5行数据生成第6行数据的情况。

图6.2 使用一维数组杨辉三角形一行的生成方法