1、数组概念
在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
数组:具有相同类型的数据组成的序列,是有序集合。
数组元素 由其所在的位置序号(称数组元素的下标)来区分。
用数组名与下标 可以用统一的方式来处理数组中的所有元素, 从而方便的实现处理一批具有相同性质数据的问题。
注意:数组元素有序不是指元素大小顺序
2、一维数组的定义
定义方式:类型说明符 数组名 [常量表达式];
例如: int a[10];
它表示定义了一个整形数组,数组名为a,此数组有10个元素,10个元素都是整型变量!
注意点:
1)类型说明符是任一种基本数据类型或构造数据类型。对于同一个数组,其所有元素的数据类型都是相同的。
2)数组名是用户定义的数组标识符。书写规则应符合标识符的书写规定。
3)方括号中的常量表达式表示数据元素的个数,也称为数组的长度。
4)允许在同一个类型说明中,说明多个数组和多个变量。
例如: int a,b,c,d,k1[10],k2[20];
5)a[10],表示a数组有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]。
6)C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。例如,下面这样定义数组是不行的:
常见的错误:
① float a[0]; /* 数组大小为0没有意义 */
② int b(2)(3); /* 不能使用圆括号 */
③ int k, a[k]; /* 不能用变量说明数组大小*/
数组元素的一般形式为:数组名[下标]
(下标可以是整型常量或整型表达式。)
例如: a[0]= a[5]+a[7]-a[2*3]
a [ i+j ]
a [ i++ ]
都是合法的数组元素。
注意点:
1)数组元素通常也称为下标变量。必须先定义数组才能使用下标变量。在C语言中只能逐个地使用下标变量,而不能一次引用整个数组。
2)定义数组时用到的“数组名[常量表达式]” 和引用数组元素时用到的“数组名[下标]” 是有区别的。
3、一维数组的引用
初始化赋值的一般形式为: 类型说明符 数组名[常量表达式]={值,值,……值};
(1)在定义数组时对数组元素赋以初值。例如: int a[10]= {0,1,2,3,4,5,6,7,8,9};
(2)可以只给一部分元素赋值。例如: int a[10]= {0,1,2,3,4};
定义a数组有10个元素,但花括弧内只提供5个初值,这表示只给前面5个元素赋初值,后5个元素值为0。不信的话可以调试一下!!尽信书则不如无书!!
(3)如果想使一个数组中全部元素值为0,
可以写成 int a[10]={0,0,0,0,0,0,0,0,0,0}; 或 int a[10]={0};
(4)在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。
例如: int a[5]= {1,2,3,4,5}; 也可以写成: int a[ ]= {1,2,3,4,5};
在第二种写法中,花括弧中有5个数,系统就会据此自动定义a数组的长度为5
4、二维数组的定义
形式:数据类型 数组名 [常量表达式1][常量表达式2] ={初始化数据};
(1) 直接分行给二维数组赋初值。如:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
(2) 可以将所有数据写在一个花括弧内,按数组排列的顺序对各元素赋初值。如: int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
(3) 可以对部分元素赋初值。如: int a[3][4]={{1},{5},{9}};
(4)如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。如:
int a[3][4]= {1,2,3,4,5,6,7,8,9,10,11,12};
它等价于:int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};