一篇文章让你数组入门到精通

数组的基本概念

首先,我们需要了解什么事数组,数组是一组相同元素的集合

这里面有两个关键点:1.数组里面可以存放一个或多个数据,但所存放的数据不能为0

                                     2.数组里面存放的数据,类型是相同的。

数组分为一维数组和多维数组,常见的多维数组是二维数组。

一维数组的创建和初始化

数组的创建

一维数组创建的常用语法如下

type arr_name[常量值];

type表示数据的类型,可以是int float char double,也可以是自定义类型

 arr_name指的是数组名的名字,可以根据自己的需要,取得有意义就好

【】的常量值是用来指定数组的大小的,这个数组的大小根据实际的需要指定就行。

比如,我们想现在存储一个班20个人的数学成绩,我们可以创建一个数组

1.int math[20];

当然,我们也可以根据需要来创建其他类型和大小的数组

1. char ch[8];

2.double arr[20]; 

数组的初始化

有时候,我们在创建数组的时候,需要根据需要对数组提供一些初始的值,这就叫做数组的初始化。

那数组应该怎么初始化呢,我们可以看下面的代码块

//完全初始化:
int ch[8] = { 1,2,3,4,5,6,7,8 };

//不完全初始化,只提供了一个1,默认其他的七个值为0
int ch[8] = { 1 };

//错误的初始化,超过了所能容纳的值,程序会报错
int ch[1] = { 4,5,6 };

数组的类型

数组也是有类型的,且大多数都是自定义类型,去掉组名后其余的部分就是数组的类型,例如:

int arr1[3];
int arr2[4];
int arr3[4]; 

arr1 的类型是int [3];

arr2 的类型是int [4];

arr3 的类型是int [4];

一维数组的使用

上面我们讲述了一维数组的基本语法,一维数组可以存放数据,存放的数据的目的是为了方便对数据的操作,下面我们讲一些它的使用。

数组下标 

C语言规定数组中的元素是有下标的,下标就类似于数组元素的编号,数组下标是从0开始,要是假设有n个数据,则最后一个数据的下标是n-1;

在c语言中,我们提供了一种下标引用操作符-[],我们可以用这个操作符,来访问我们所需要的那个数据。请看下面的代码。

#include<stdio.h>
int main()
{
    int arr[8] = {1,2,3,4,5,6,7,8};
    printf("%d", arr[4]);


}

数组元素的打印

那么,我们要是想要打印整个数组的数据,该怎么办呢?,这个时候,我们就可以利用到循环语句,请看下面的代码块

例子:在屏幕上打印出数组的全部数据

#include<stdio.h>
int main()
{
    int i;
    int arr1[8] = { 1,2,3,4,5,6,7,8 };
    for (i = 0; i < 8; i++)
    {
        printf("%d ", arr1[i]);
    }

    return 0;
}
 

数组的输入

明白了数组了打印,接下来我们需要了解一下数组的输入,将自己想打印出来的数字输入到数组中去。

#include<stdio.h>
int main()
{
    int ch[8];
    int i;
    for (i = 0; i < 8; i++)
    {
        scanf("%d", &ch[i]);
    }
    for (i = 0; i < 8; i++)
    {
        printf("%d ", ch[i]);
    }
    return 0;

一维数组在内存中的存储

看了上面的内容,其实数组就已经入门了,我们要是想要详细了解一下数组的话,就先看一下数组在内存中的存储,请看下面的代码。

#include<stdio.h>
int main()
{
    int arr[8] = { 1,2,3,4,5,6,7,8 };
    int i;
    for (i = 0; i < 8; i++)
    {
        printf("&arr[%d]=%p\n ", i, &arr[i]);
    }

    return 0;
}

从上面的代码中我们可以看到下面的运算结果。 

从这个结果当中我们可以看到,运算结果从上到下是依次增加的,并且每一次都会+4(每一个整型就是4个字节),所以我们得出结论,数组的数据在内存中是连续存放的,这就为我们接下来的使用指针访问数组奠定了基础。

sizeof计算数组元素个数

在这个时候,有没有一种冲动,想要知道数组的个数,如果我们想这个干,我们应该怎么办呢,在C语言当中有计算数组元素个数的函数吗,有的,那就是sizeof

sizeof在c语言中是一个关键字,他是可以计算类型和元素大小的,我们就可以利用他来计算出数组元素的大小,具体的例子呢,我们可以看下面的代码块:

#include<stdio.h>
int main()
{
    int arr[8] = { 0 };
    printf("%d ", sizeof(arr));

    return 0;
}

这里得出的结果是32,计算的是数组占用的内存空间的总大小,单位是字节。

我们又知道数组中所有元素的类型是一样的,所以我们就可根据总大小和每个元素所占据的大小,就可以计算出数组元素的个数。

详细的代码块描述如下:

#include<stdio.h>
int main()
{
    int arr[10];
    int sz = sizeof(arr) / sizeof(arr[0]);
    printf("%d ", sz);
    return 0;

这里的结果是10,表示数组有10个元素。

以后在代码中需要元素个数的地方就不用写死了,使用上面的计算,无论数组怎么变化,计算出的大小也就随着变化了。

二维数组的创建

二维数组的概念

前面我们所讲的内容的一维数组,数组的元素是内置型的,我们要是将一维数组当成元素,得到的就是二维数组,同理,将二维数组当成元素,得到的就是三维数组,就类似于点成面。

二维数组的定义

那么二维数组的类型长什么样子呢,看如下代码块

type arr_name[a][b];

a表示有a行

b表示的是一行有b个元素

type表示的是类型

arr_name表示的是类型名,可以自定义

二维数组的初始化

不完全初始化

二维数组的不完全初始化和一维数组极其类似

int arr[8][4]={3,4}; 

展开后,该数组会横着在第一行排3和4,剩下的均为0

完全初始化

二维数组的完全初始化,就和一维数组的类似,按着行排从低到高,从左到右,0为开始。

以行为标准的初始化

int arr[3][5]={{3,4},{3,5},{1,2}}; 

这样子,数组呈现出来的话,一共有三行,每行只有两个元素。

二维数组的使用

二维数组的下标

同一维数组一样,二维数组也是有下标的,每一行和每一列均为0开始。举个例子:

#include<stdio.h>
int main()
{
    int arr[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
    printf("%d ", arr[2][3]);

    return 0;
}