数组的概念和定义
⼀、什么是数组
在程序设计中,为了处理⽅便,把具有相同类型的若⼲变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语⾔中,数组属于构造数据类型。⼀个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组⼜可分为数值数组、字符数组、指针数组、结构数组等各种类别。
⼆、数组的定义
1、我们知道,要想把数据放⼊内存,必须先要分配内存空间。放⼊4个整数,就得分配4个int类型的内存空间:
int a[4];
这样,就在内存中分配了4个int类型的内存空间,共 4×4=16 个字节,并为它们起了⼀个名字,叫a。
2、我们把这样的⼀组数据的集合称为数组(Array),它所包含的每⼀个数据叫做数组元素(Element),所包含的数据的个数称为数组长度(Length),例如int a[4];就定义了⼀个长度为4的整型数组,名字是a.
数学数组的定义是什么数组是⼀个整体,它的内存是连续的;也就是说,数组元素之间是相互挨着的,彼此之间没有⼀点点缝隙。下图演⽰了int a[4];在内存中的存储情形:
「数组内存是连续的」这⼀点很重要,所以我使⽤了⼀个⼤标题来强调。连续的内存为指针操作(通过指针来访问数组元素)和内存处理(整块内存的复制、写⼊等)提供了便利,这使得数组可以作为缓存(临时存储数据的⼀块内存)使⽤。
3、数组的初始化
上⾯的代码是先定义数组再给数组赋值,我们也可以在定义数组的同时赋值,例如:
int a[4] = {20, 345, 700, 22};
数组元素的值由{ }包围,各个值之间以,分隔。
对于数组的初始化需要注意以下⼏点:
1) 可以只给部分元素赋值。当{ }中值的个数少于元素个数时,只给前⾯部分元素赋值。例如:
int a[10]={12, 19, 22 , 993, 344};
表⽰只给 a[0]~a[4] 5个元素赋值,⽽后⾯ 5 个元素⾃动初始化为 0。
当赋值的元素少于数组总体元素的时候,剩余的元素⾃动初始化为 0:
对于short、int、long,就是整数 0;
对于char,就是字符 '\0';
对于float、double,就是⼩数 0.0。
我们可以通过下⾯的形式将数组的所有元素初始化为 0:
int nums[10] = {0};
char str[10] = {0};
float scores[10] = {0.0};
由于剩余的元素会⾃动初始化为 0,所以只需要给第 0 个元素赋值为 0 即可。
2) 只能给元素逐个赋值,不能给数组整体赋值。例如给 10 个元素全部赋值为 1,只能写作:
int a[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
⽽不能写作:
int a[10] = 1;
3) 如给全部元素赋值,那么在定义数组时可以不给出数组长度。例如:
int a[] = {1, 2, 3, 4, 5};
等价于
int a[5] = {1, 2, 3, 4, 5};
最后,我们借助数组来输出⼀个 4×4 的矩阵:#include <stdio.h>
int main()
{
int a[4] = {20, 345, 700, 22};
int b[4] = {56720, 9999, 20098, 2};
int c[4] = {233, 205, 1, 6666};
int d[4] = {34, 0, 23, 23006783};
printf("%-9d %-9d %-9d %-9d\n", a[0], a[1], a[2], a[3]); printf("%-9d %-9d %-9d %-9d\n", b[0], b[1], b[2], b[3]); printf("%-9d %-9d %-9d %-9d\n", c[0], c[1], c[2], c[3]); printf("%-9d %-9d %-9d %-9d\n", d[0], d[1], d[2], d[3]); return 0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论