C语言--数组

来源:互联网 发布:反dns劫持 软件 编辑:程序博客网 时间:2024/05/22 00:30

数组,在任何一种编程语言中都是很重要的一种数据类型,在任何的开发过程中,在都是很常用的到。C语言中的数组是存储一个固定大小的相同类型元素的顺序集合。

数组的声明不是声明一个变量,而是声明一个数组变量,来表示一个个单独的变量。数组的声明,其实是告诉编译器去开辟空间,用来存储数组元素,也就是一个一个的变量。

那么,先来看看数组的声明:一个数组的声明,一般要有3个部分:1、数组类型;2、数组名称;3、数组长度。

int array[10];

下面,我们来介绍下这个数组。上面声明的数组,数组类型是int类型,数组名称是array,数组长度是10。

这里需要说明一下,数组类型指的是数组中元素的类型,这里就映照了开始的时候我们说的,数组是相同类型元素的顺序集合。

声明了数组以后,怎么给数组赋初始值。那就是数组的初始化:

int array[10] = {1,2,3,4,5,6,7,8,9,0};

这样就给array数组初始化赋值了,{}内的元素个数不能大于数组长度。这个数组是一个int类型的数组,有10个元素,分别是:1,2,3,4,5,6,7,8,9,0。顺序不能错,因为我们前面说了数组是一个顺序集合。

如果省略掉数组长度,那么数组的长度为初始化时数组中元素的个数。如:

int array[] = {1,2,3,4,5,6,7};

这个数组的长度就是7。

说完了数组的声明和初始化,下面再来说说,数值的使用,也就是访问数组元素。这里才是真正体现数组优势的地方。

数组的访问,可以通过数组名和索引来进行。这里来解释下数组索引。所谓数组索引就是数组中各个元素对应的数字。在数组这个数据类型中,第一个数组元素的索引为0,往后逐个+1。所以,想要访问上面初始化的数组的第二个元素,只要使用 array[1] 就行了。这里需要注意一点,[]中的索引不能大于数组长度-1不然会抛出数组越界的错误。

说到这里,还是没有看到数组的优势在哪。那么接着往下来。数组元素的访问时可以使用索引进行访问的,而且数组的索引还是从0开始递增的。这样的结构让我不禁想到了for循环了。对于一个for循环来说,数组这个东西简直太好用了。在循环中,使用i作为数组的索引,可以很轻易的访问数组中的每一个元素。当然,数组的好处还不止这一点。方便了变量的读写也是一个很重要的好处。

下面我们来写一个完整的数组证明,初始化,访问的代码片段:

int main(int argc, const char * argv[]) {

    //数组声明

    int array[10];

    

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

        //写部分,数组初始化赋值。

        array[i] = 100 + i;

    }

    

    for (int j = 0; j < 10; j++) {

        //读部分,数组循环访问。

        printf("array[%d] = %d\n", j, array[j]);

    }

    

    return 0;

}

运行结果:

array[0] = 100

array[1] = 101

array[2] = 102

array[3] = 103

array[4] = 104

array[5] = 105

array[6] = 106

array[7] = 107

array[8] = 108

array[9] = 109

Program ended with exit code: 0


上面对数组进行了简单介绍,下面我们在继续看看数组还有别的人可供我们学习的地方。

1、二维数组(多维数组):一个二维本质上是一个一维数组的列表。

变量,一维数组,二维数组,三维数组,我们理解起来可以用点,线,面,体来帮助我们理解,一个变量对应点,一个一维数组是变量的顺序集合,线是点的顺序集合,所以一维数组对应线,二维数组是一维数组的列表,面也是线的顺序列表。同理推导到三维数组和体。这样理解起来,多维数组也就很简单了。下面都以二维数组为例,三维以上的数组在实际应用中很少见。

对于一个二维数组,声明方式与一维数组(下面都简称为数组)相同:

int array[2][3];

这里出现了两个[],第一个表示行,第二个表示列。上面的代码就是声明了一个2行3列的二维数组,下面我们画一张图来分析这个二维数组,看到图以后,其实二维数组就很简单了。

通过上面的图片,我们可以看出,二维数组的每一行都是一个数组。那么,对于二维数组的初始化就简单多了。只是将几个一维数组作为数组元素放到另一个数组中:

int array[2][3] = {{1,2,4},{8,6,0}};

还有一种初始化方式:

int array[2][3] = {1,2,4,8,6,0};

这两种方式是相等的效果,但是推荐使用第一种,因为看着清晰,不容易出错。

二维数组的访问和一维数组相同,也是使用索引,只是在二维数组中使用的是2个索引,第一个索引([]内的数字)表示元素在第一层{}中的位置,第二个索引表示在第一个索引所对应的{}内对应的数字。看着有点绕,那么我看来根据上面初始化的二维数组解释一下。

int array[2][3] = {{1,2,4},{8,6,0}};

在这个数组中,如果我们访问使用索引数组访问 array[1][2] 这个时候第一个[]中的1就表示 {{1,2,4},{8,6,0}} 这个二维数组最外层{}中的{8,6,0}这个元素,因为前面一个的索引是0。第二个[]中的2表示{8,6,0}这个数组中的第三个元素0.所以,array[1][2]对应的就是0.

下面我们也来写一个完整的二维数组的读写:

int main(int argc, const char * argv[]) {

    //数组声明,和初始化

    int array[5][3] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15}};

    

    //循环访问数组

    for (int i = 0; i < 5; i++) {

        for (int j = 0; j < 3; j++) {

            printf("array[%d][%d] = %d\n", i, j, array[i][j]);

        }

    }

    

    return 0;

}

打印结果:

array[0][0] = 1

array[0][1] = 2

array[0][2] = 3

array[1][0] = 4

array[1][1] = 5

array[1][2] = 6

array[2][0] = 7

array[2][1] = 8

array[2][2] = 9

array[3][0] = 10

array[3][1] = 11

array[3][2] = 12

array[4][0] = 13

array[4][1] = 14

array[4][2] = 15

Program ended with exit code: 0


到这里,数组的基本知识就已经差不多结束了。关于数组的其他知识点,在以后的文章中,还会再整理给大家。

0 0