C语言——数组详解

        啊哈,时隔一个月,终于是开始写第二篇正式的博客了。这次我想写写数组,简单介绍一下数组,以及如何使用。

1.数组的概念

数组是一组相同类型元素的集合。数组可以存放一个及多个数据,但不能是零。且存放的数据类型必须相同。

数组分为一维数组和多维数组,我们比较常用的是一维数组和二维数组。

一维数组

2.一维数组的创建

2.1 数组创建

type arr_name[常值量];

type:数组存放的类型,如int、char、float等,也可以是自定义的类型。

arr_name:数组的名字,根据实际情况自行定义。

[ ]:根据实际情况指定数组的大小。

例如:如果我们现在想用数组来存放班上十个人的高数成绩,我们就可以创建一个数组,如下:

int math[10];

2.2 数组的初始化

有些时候我们需要给数组一些初始值,即对数组初始化。

数组的初始化如下:

//完全初始化
int arr1[5]={1,2,3,4,5};

//不完全初始化
int arr2[5]={1};//第一个元素初始化为1,其余元素默认初始化为0

要注意初始化的个数不能大于数组本身能接受的元素总数。

2.3 数组的类型

数组是有类型的,数组算是一种自定义类型,去除数组名留下的就是数组的类型。如下:

int arr[5];
char ch[10];

arr数组的类型为int [10]

ch数组的类型为char [10]

3.一维数组的使用

介绍完一维数组的基本知识,下面来介绍如何使用一维数组。

3.1 数组下标

C语言规定数组是有下标的,下标从0开始,而不是从1开始。

我们定义如下一个数组:

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

那么

数组12345678910
下标0123456789

在C语言中数组的访问提供了一个专门的操作符[ ],该操作符名为:下标引用操作符

这个操作符方便我们访问数组元素,如下:

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

这样子我们就可以访问数组中下标为5的元素。输出结果如下:

3.2 数组元素的打印

现在如果我们想打印数组中的全部内容。

我们可以运用之前所学到的for循环的知识,遍历数组的每一个下标。如下:

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

输出结果如下:

3.3 数组元素的输入

明白了数组的访问,我们接下来应该知道如何根据需求,给数组输入数组,如下:

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

我们来运行该程序并输入,可以得到如下结果:

4.计算数组元素的个数

在遍历数组的时候,若我们想知道数组的元素个数,我们可以用sizeof来计算。

sizeof是C语言中的一个关键字,可以计算类型或者变量大小的,也可以计算数组的大小

如下:

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

运行结果如下:

输出结果为40,计算的是数组所占内存空间的大小,单位是字节。

在数组中所有元素的类型都是相同的,那么只要计算出一个元素所占字节的个数,那么就可以计算出数组中的元素个数。我们可以选择第一个元素计算大小。

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

可以计算出一个元素的大小为4。

接下来我们就可以计算数组的元素个数:

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

输出结果为10,表示数组中有10个元素。

二维数组

5.二维数组的创建

5.1 二维数组的概念

学习了一维数组,我们现在来学习一下二维数组。它由多个一维数组组成,每个一维数组又可以包含多个元素。可以将二维数组类比为一个表格或者矩阵,其中行表示第一个维度,列表示第二个维度。

5.2二维数组的创建

定义二维数组的语法如下:

type arr_name[常值量1][常值量2];

例如:
int arr[3][5];

解释:3 表示数组有3行

           5 表示每一行有5个元素

           int 表示数组的元素类型为整形

           arr 是数组名,根据实际情况自行定义

6.二维数组的初始化

6.1 不完全初始化

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

我们可以用表格来展示一下arr1这个数组如何存放元素

01234
012000
100000
200000

6.2 完全初始化

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

同样我们也用表格来展示一下

01234
012345
1678910
21112131415

6.3 按照行初始化

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

表格演示如下:

01234
012000
134000
256000

6.4 初始化时能省略行,但不能省略列

下面有三个例子:

int arr4[][5]={1,2,3};
01234
012300
int arr5[][5]={1,2,3,4,5,6,7,8};
01234
012345
167800
int arr6[][5]={{1,2},{3,4},{5,6}};
01234
012000
134000
256000

以上就是关于二维数组初始化的全部内容了,接下来我们来了解一下如何使用二维数组。

7.二维数组的使用

7.1 二维数组的下标

访问二维数组同样也是使用下标的形式,二维数组有行和列,只要锁定了二维数组中的行和列,就可以锁定数组中的一个元素。

C语言规定,二维数组的行和列都是从0开始,如下所示:

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

表格演示如下:

01234
012233
145677
278889

当我们锁定第二行,第四列,便可以快速锁定数组元素为9.

代码演示:

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

运行结果如下:

7.2 二维数组的输入和输出

我们已经了解如何访问数组中的某个元素,下面我们来学习一下如何实现二维数组的输入和输出。

实际上我们可以通过循环来实现生成所有的下标,帮助我们将元素与存放位置一一对应。

代码如下:

#include<stdio.h>
int main()
{
    int arr[3][5];
    int i=0;
    int j=0;
    for(i=0;i<3;i++)
    {
        for(j=0;j<5;j++)
        {
            scanf("%d",&arr[i][j]);
        }
    }
//以上代码可以实现输入
    for(i=0;i<3;i++)
    {
        for(j=0;j<5;j++)
        {
            printf("%d ",arr[i][j]);    
        }
        printf("\n");
    }
//以上代码可以实现输出
    return 0;
}

输入和输出结果如下:

数组在内存中的储存

8.1 一维数组在内存中的储存

学习了上面的知识,我们其实使用数组基本就没什么障碍了,这部分内容可以帮助我们深入了解数组,有利于我们未来学习指针的相关知识。

我们来了解一下数组在内存中的存储。

我们可以通过代码依次打印数组元素的地址,如下:

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

运行结果如下:

我们通过观察可以发现,随着下标的增大,地址也在增大,并且每个元素之间相差4(一个整型是4个字节)。因此我们得到结论:数组在内存中是连续存放的。

8.2 二维数组在内存中的储存

与一维数组一样,我们也能通过代码打印出二维数组中所有元素的地址。代码如下:

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

运行结果如下:

我们可以发现,哪怕是跨行位置的两个数列之间也只差4个字节,例如arr[0][4]和arr[1][0]。

因此二维数组中的每个元素也是连续存放的。

结束语

以上便是这篇文章的全部内容了,欢迎大家指出文章的不足和错误,如果觉得看完有所收获,也希望能点个赞什么的。

  • 52
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值