C语言基础——数组

对于类型一致的大量数据,我们可以将其有序的存放在一起,形成一个集合。在C语言中,这种集合以数组的形式表示。根据数组的复杂度分为一维数组、二维数组、多维数组。

一.数组概述

数组就是将相同类型、关联的数据统一存储,并使用一个变量名指代这些数据。在C语言中,开发人员可以创建一个数组,然后将同类型的数据存放在一起,以整体的形式进行管理。这时,将数组中的数据称为元素,在一个数组中,元素的个数可以为一个也可以为多个。

1.存储方式

数组在内存中占有一个连续存储空间。数组名实际指代的是数组所使用存储空间的首地址。

2.使用方式

一个数组可以包含多个元素,每个元素都会对应一个下标。通过下标访问数组的元素 首位是【0】依次加1。

二.一维数组

一维数组是C语言中最简单,最基础的数组形式。它可以将多个普通数据归并为一个集合,并为这个集合进行命名和使用。

1.定义一维数组

定义一维数组也就是声明一个数组变量,在定义一维数组时,要指定类型名、数组各及常量表达式这3个部分。
定义一维数组的语法:

类型名 数组名[常量表达式]
  • 类型名用于定义一维数组中的每个元素的数据类型,如规定一维数组中的每个元素在内存中所占存储单元的大小。
  • 数组名表示一维数组的名称,用于指代该一维数组。数组名要符合标识符的命名规则。
  • 常量表达式用于定义一维数组包含多少个元素,即规定一维数组的长度。该项必须是一个常量表达式。

在定义一维数组时,类型名在定义元素数据类型时,就定义了一维数组的基类型。
一维数组的基类型规定了使用指针访问一维数组中的元素时每个元素的存储单元大小。使用数组名存放的首地址结合一维数组的基类型即可读取一维数组中的所有元素。

在这里插入图片描述

2.初始化一维数组

初始化一维数组就是将多个值依次赋给数组的每个元素。

数据类型 数组名[常量表达式] = {值1,值2,……,值n};

对于数值类型一维数组,如果初始化的值个数不够,则自动用0表示未输入的值。对于一个字符数组,如果初始化时字符的个数不够,就用字符“\0”补全在这里插入图片描述
在这里插入图片描述
其中[]里面的常量表达式可以没有,此时后面大括号几个元素就默认数组大小多大。但是[]不可以省。

在这里插入图片描述

3.使用一维数组

使用一维数组是指访问一维数组中的元素值。访问有三种方式:

a.数组名与下标结合的方式

数组名与下标结合的方式是最常用的访问一维数组中的元素的方式。该方式通过下标的不断改变,可以访问一维数组的所有元素。

数组名[下标]

在这里插入图片描述
使用数组名下标还可以对数组进行初始化
在这里插入图片描述

b.数组名与偏移量结合的方式

数组名与偏移量结合的方式是通过间接访问运算符(*),间接访问地址指向的数据。

*(数组名+偏移个数)

数组名存放的是一维数组的首地址,一维数组中地址是连续的。在这里插入图片描述

c.使用指针的方式

使用指针的方式是指将数组名指代的地址赋给一个指针变量,然后通过指针变量中的地址访问一维数组中的每一个元素。在这里插入图片描述

4.一维数组作为实参

在使用函数时,一维数组经常作为函数的参数。

a.元素作为实参

是指调用函数时,将一维数组中的某个元素一实参形式进行穿递。

函数名(数组名[下标]);

在这里插入图片描述
arr[5]数据类型与函数的形参变量arr数据类型是相同的。

b.数组名作为实参

数组名作为实参是指将数组名作为实参进行传递。这时,穿递的是数组的首地址。所以函数在声明时,函数的形参必须是与其基类型相同的指针变量。在这里插入图片描述

在访问一维数组的元素是,如果只知道数组名而不知道一维数组长度,是无法对一维数组中的每个元素进行访问的,这是因为不知道一维数组的边界在哪。所以必须穿递长度和数组名。
在这里插入图片描述

c.元素地址作为实参

将一维数组中的元素对应的地址作为实参进行传递。这时,就要用到取地址&。

函数名(&数组名[下标]);

在这里插入图片描述

三.二维数组

一维数组是一行一串数字,二维数组就多了个维度。

1.定义二维数组

就是声明一个二维数组变量,定义二维数组时,要指定类型名、数组名、常量表达式1及常量表达式2这四部分。

类型名 数组名[常量表达式1][常量表达式2]
  • 类型名用于定义二维数组中最小元素的数据类型。他规则了二维数组中最小元素在内存中所占存储空间的大小,也就是二维数组中子元素的存储类型。
  • 数组名表示二维数组的名称,用于指代该二维数组。数组名需要符合标识符的命名规则。在C语言中,数组名实际指代的是二维数组的首地址。
  • 常量表达式1用于定义二维数组中的元素个数。二维数组中的每个元素都等同与一个单独的一维数组,即一个一维数组就是二维数组中的一个元素。
  • 常量表达式2用于定义元素的逻辑结构,也就是规定每个元素包含几个子元素。

常量表达式1和常量表达式2的乘积就是二维数组长度。二维数组的基类型由类型名与常量表达式2定义,即二维数组的基类型长度是类型名长度乘以常量表达式2的值

int A[2][3]

在这里插入图片描述
在这里插入图片描述

2.初始化二维数组

初始化二维数组就是将多个值依次赋给二维数组中的每个元素。

第一种

数据类型 数组名[常量表达式1][常量表达式2]={值1,值2,……,值n};

对于数值类型二维数组,如果初始化值不够,其余数用0代替。
在这里插入图片描述

对于字符类型二维数组,不够了用’\0’代替。由于’\0’打印出来为空白。
在这里插入图片描述
第二种

数据类型 数组名[常量表达式1][常量表达式2]={{值1,值2,……,值n},{值1,值2,……,值n}}

其中第一个[]的值可以省略,第二个[]值不可省略

3.使用二维数组

使用二维数组是指访问二维数组中所有的子元素。访问二维数组中的子元素可以有以下三种方式。

a.数组名与两个下标结合的方式

二维数组每个子元素都会对应两个下标(相当于坐标轴)
在这里插入图片描述

arr[纵轴][横轴]

在这里插入图片描述

通过数组名与两个下标结合的方式也可以对数组进行修改
在这里插入图片描述

b.数组名[一个下标]与偏移量结合的方式

在这里插入图片描述

c.数组名与偏移量结合的方式

在这里插入图片描述

四.多维数组

维度超过2的数组。

类型名 数组名[常量表达式1][常量表达式2]……[常量表达式n]
  • 类型名用于定义多维数组中每个最小元素的数据类型,规定了多维数组中的每个最小元素在内存中所占存储单元的大小。
  • 数组名是多维数组的名称,用于指代多维数组,数组名要符合标识符的命名规则,在数组名中,会存放多维数组的首地址。
  • 常量表达式1用于定义多维数组的元素个数,在多维数组中的每个元素都等同于一个多维或二维数组,一个多维或二维数组就是一个元素。
  • 常量表达式2用于定义元素的逻辑结构,也就是规定每个元素包含几个子元素,
  • 常量表达式2用于定义子元素的逻辑结构,也就是规定每个子元素包含多少个孙元素。
  • 常量表达式n中的n为维数,如:n=3为三维数组,多维数组的长度为所有常量表达式的乘积。

五.指针和数组

在C语言中,指针和数组会有许多关联。

1.指针数组

将多个基类型相同的指针放在一起的集合,指针数组的本质为数组。指针数组中的元素都为指针,指代各种数据的地址。

数据类型 *数组名[常量表达式]

访问:

*数组名[下标]

初始化指针数组与初始化其他数组是一样的,指针数组也有二维和多维指针数组,在定义二维和多位指针数组的语法中,根据常量表达式的个数确定该数组的维度

2.数组指针

指特定基类型的一个指针,数组指针会指向一个数组,数组指针的本质是一个指针。使用数组指针可以直接访问二维数组中的每行数据(元素),所以数组指针又称指针。

数据类型 (*数组名) [下标]

3.二维数组作为实参

在调用函数时,如果实参为二维数组,那必须声明该函数的形参为指针。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

dataowu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值