C语言 一维数组的定义
1.一维数组的定义方式
对一维数组进行定义的方式为:
类型标识符 数组名[元素个数];
例如:
int ar r [7];
定义了一个名为arr的整型数组,数组中有7个元素。
前面提到过数组元素是有序的,这个有序性并不是说数组中各个元素的值的大小有序,而是同一个 数组的数组元素在内存中的存储空间是连续的,按照数组元素的下标从小到大依次存放。其中,数组名代表该数组的首地址,例如上例中,arr是数组名,代表数组在内存中的首地址,因为数组元素依次存放,所以如果知道首地址,就可以推断出数组中每个元素的地址。
数组元素地址=数组首地址+元素下标+siziof (数组类型)
假设:每个整型数据在内存中占4个字节,数组arr的起始地址(即数组中的第一个元素的地址)为2000,下图所示是数组arr在内存中的存储示意图。那么,从公式中可以推断出:
数组元素arr[3]的地址为:2000+3*4=2012。
2000 | 78 | drr[0] |
2004 | 72 | arr[1] |
2008 | 91 | arr[2] |
2012 | 87 | arr[3] |
2016 | 90 | arr[4] |
2020 | 57 | <arr[5] |
2024 | 69 | drr[6] |
2.说明
(1)类型标识符说明数组元素的类型。可以是int、long、char、float、double等。
(2)数组名的命名规则与变量的命名规则相同,遵循标识符的命名规则。
(3)数组元素的下标从0开始,所以arr[0]为第一个元素,arr[6]为该数组的最后一个元素,不存在数组元素arr[7]。由于C语言对于下标越界错误不做判读,不报错,所以如果程序设计中,不小心出现了arr[7], C编译系统也不会报错。如果输出,会输出一个不确定值,所以需要编程人员自己慎重控制。
(4)“元素个数”即数组长度,只能是一个整型常量表达式。可以是符号常量。例如,以下数组的定义都是合法的:
int a [5];
定义了一个数组名为a的整型数组,其中含5个元素。
char ch [100]:
定义一个有100个元素的字符数组,数组名为ch。
#define N 5;
double b [N*2];
使用符号常量N定义了一个double型数组,里面含10个元素。
需要注意的是:C语言不允许使用变量定义长度不定的动态数组,所以“元素个数”中不能包括变量。例如,以下定义是错误的:
int n ;
float arr2[n];
因为c编译系统需要根据定义数组中元素的个数和类型为数组分配相应大小的内存空间。如果使用变量定义数组,变量的值不确定,所以编译系统无法确定数组的大小。即便把上述定义改为如下方式:
int n-10;
float arr2[n];
也是不对的,因为n的值只有在程序运行阶段才能确定,而数组空间的分配则是在编译阶段完成的。
(5)定义数组时,数组元素两边一定是方括号,写成括号或花括号都是错误的。例如:
int a(10);
, long x{5);
例:判断下列数组的定义哪些是合法的,哪些是不合法的。
②int student [35];
②char name [20];
③float score [35];
④
#deflne student 35
float n, student[student];
④int person(1O);
⑤int n=10, a[n];
其中,①、②、③题中的数组定义都是合法的,而④、⑤、⑥的定义都是不合法的。④的不合法处是因为标识符“student”又当常量名,又作为数组名出现,这是不允许的。⑤的错误之处在于数组元 素的两边一定要是方括号。⑥的错误是试图使用变量作为数组元素个数出现。
(6)和变量一样,可以在一个类型声明中声明多个数组。例如:
double salary [8] ,tax[8];
也可以变量和数组进行混合声明。例如:
int iuscore[30];
点击加载更多评论>>