C语言入门总结【数组】

本文深入讲解了数组的概念,以火车车厢为比喻,详细阐述了一维数组和二维数组的定义、初始化和访问方法。一维数组是一串数据的组合,二维数组则可视为由多个一维数组组成的矩阵。通过实例展示了数组的初始化和访问过程,并探讨了数组在实际编程中的应用。
摘要由CSDN通过智能技术生成

好比现实中的火车,一个火车头加上若干个火车车厢,车厢可以存放我们想要存放的物品;数组也是与火车类似的模型

一维数组

数组,可以理解成一串数据的组合;将内存想象成一列有若干个车厢的火车,每一个车厢都有属于自己的编号并按顺序排列。数组就是以某一节车厢为起点,根据定义时的元素数量,以及数据类型的长度,来分配一连串的内存空间
例如int类型的数组,因为int类型长度为4,所以每一个数组元素都能分配到四节连续的车厢(四个字节)的空间

int hc[4];

在这里插入图片描述
(网上找的图)
如上,我定义了一个有四个元素的int类型数组,就如图中所示,每四节车厢都可以存入一个int类型的数据(如常量6)

一维数组的定义

数据类型 数组名[数组内元素数量];
int oa[4];

如上为定义一维数组的语法

  • 数据类型为数组内储存元素的类型
  • 数组定义时需要声明数组能储存元素的数量,也就是数组长度
  • 数组长度必须为常量如下所示为非法定义数组
int a = 6;
int oa[a]; //报错

我们也可以用宏定义的方式定义符号常量来给出数组长度,宏定义为头文件define

#define N 6
int oa[N];

宏定义的内容放在以后详说,读者可以自行查资料,这里只要知道这句代码的作用即可

一维数组的初始化

如上面的图,数组定义以后并没有对其初始化,这时候我们对其进行访问得到的一般是它的内存地址,初始化为对其赋予初始值

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

可以看到,我们对数组进行初始化是在赋值符号(=)后面用大括号表示,并依序对数组内空间赋值。
如果对数组赋值时赋值数量大于数组长度,则会因为内存溢出报错

int oa[4] = {1,2,3,4,5}; //内存溢出

如果对数组赋值是赋值数量小于数组长度,则会自动将剩下的元素自动赋值0

int oa[4] = {1,2};
for (int i=0; i<4; i++)
{
    printf("%d ", oa[i]);
} //用循环遍历数组内容

运行结果为

1 2 0 0

一维数组的访问

数组内有多个同类型元素,我们可以用数组下标的方式进行访问

int oa[4] = {1,2};
for (int i=0; i<4; i++)
{
    printf("%d ", oa[i]);
} //用循环遍历数组内容

数组的下标为以0为起点,从数组第一个元素开始,每个元素逐一递增整形常量,如

  • 0,1,2,3,4,5,6…

在这里插入图片描述

  • 每个元素对应一个下标
  • 对数组的访问可以用变量表示下标
int a = 2;
int oa[4] = {1,2,3,4};
printf("%d", oa[a]);

运行得到

3

二维数组

二维数组的定义

数据类型 数组名[行数][列数]
int oa[4][6];

如上为定义二维数组语法

  • 行数列数均与一维数组的数组长度一般,只能为常量

同一维数组一般,二维数组其实就是若干个(行数)一维数组(以为数组长度为列数)组合而成,并且这若干个一维数组在内存中均是连续的
在这里插入图片描述
如图所示,每一个格子都能存入一个数据
为了更直观理解二维数组,我们可以将它看成一个平面图
在这里插入图片描述
假设每个格子都为一个盒子,二维数组拥有
(行数)*(列数)个盒子,也就是能存入如此多个数据

二维数组的初始化

二维数组的初始化方式与一位数组一致

int oa[4][6] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24};

因为二维数组可以看成有行数个列数长度的一维数组,所以也可以用大括号来对每一个一维数组赋值

int oa[4][6] = {{1,2,3,4,5,6},{7,8,9,10,11,12},{13,14,15,16,17,18},{19,20,21,22,23,24}};

也如同一维数组一般,赋值时对缺少的部分会自动赋值为0

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

结果如图
在这里插入图片描述
对二维数组中的一维数组逐一赋值时,也会对缺少部分自动赋值为0

int oa[4][6] = {{1,2,3,4},{7,8,9},{13,14,15,16,17,18}};

结果如图
在这里插入图片描述

二维数组的访问

二维数组的访问方式也同一位数组一般,可通过下标进行访问;二维数组的下标定位如图所示
在这里插入图片描述
通过下标直接访问

int oa[4][6] = {0};
printf("%d", a[3][6]);

也可以通过循环将数组打印出来

int oa[4][6] = {{1,2,3,4,5,6},{7,8,9,10,11,12},{13,14,15,16,17,18},{19,20,21,22,23,24}};
int main()
{
    for (int i =0; i < 4; i++)
    { // 外层循环i控制行数
        for (int j = 0; j < 6; j++)
        { //。内层循环j控制列数
            printf("%d\t", oa[i][j]);
        }
        printf("\n");
    }
}

运行结果如下

1     2     3     4     5     6
7     8     9     10    11    12
13    14    15    16    17    18
19    20    21    22    23    24

数组实际应用

通过这些基础方法便可以实现对数组的一系列操作,比如通过循环定位后交换两个元素的值
在这里插入图片描述
通过这种算法实现简单的数组排序,也可以思考一下怎么实现数组元素的查找,以及如何在数组中间插入一个数据

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋紫落霞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值