一维数组与二组数组数组名应用及其数据类型

本文详细介绍了C语言中一维数组和二维数组的应用,包括数组名的含义、数组名与下标结合的用法。重点讨论了`arr`、`arr+1`、`arr[0]`、`arr[0]+1`在一维数组中的作用,以及`int *p[4]与int (*p)[4]`、`brr`、`brr+1`、`brr[0]`、`brr[0]+1`、`brr[0][0]`在二维数组中的意义。文章通过实例帮助理解数组在内存中的表示和操作。
摘要由CSDN通过智能技术生成

一维数组与二维数组数组名应用及其数据类型

在应用数组的过程中,我们都会使用到数组名以及数组名与下标结合使用的情况,所以在老师总结后,我在这里总结一下这些情况。

首先在这里展示一张我们的老师总结的一张图,对下面的讲解有一定的帮助理解作用。里面有些东西比如像int *p,是一种指针类型的示意方式,请不要太过在意,只是一种示意而已,以下是该图:一维与二维数组

一维数组

如图,我们定义了一个长度为4的一维数组(这个只是举例子,长度无所谓)
定义过程当然很简单就是int arr[4];

arr

arr有两种用法:
第一种用法中,它代表的是整个数组的长度(字节长度),最为常见就是的用法就是以下两种:
1.我们常用sizeof(arr)来求得整个数组所占的字节长度;
2.我们常用&arr+1来表示整个数组后面的一个字节的地址(当然其实到目前我自己还没有这么运用过)。
第二种用法就相当普遍了,这个arr用来表示数组首元素的地址,也就是arr[0]的地址,所以也就是说arr实际上是一个指针,由于示例是整型数组,所以就是一个整型的指针(当然这随着数组数据类型的改变而改变)。

arr+1

我们已知arr是数组首元素的地址,那么我们给这个指针加一的意思就是说,我们把这个指针移向下一元素的地址上,那我们就可以很容易理解到arr+1是arr[1]的地址,所以可以由此可以说arr+1就是一个指针变量。那我们可以由此可以推出arr+2是arr[2]的地址,arr+3是arr[3]是的地址……在一个正整数n小于数组长度下,arr+n是arr[n]的地址。

arr[0]

这个就不多说了,这个表示得是数组0号存储空间存储的数据,由于本例子是一个整型数组,所以数据类型是整型,当然随着数据类型变化而变化,这个具体情况具体分析了。

arr[0]+1

这个显而易见类似于arr+1,arr[0]是整型,所以arr[0]+1就是表示1号存储空间的数据,其实就等价于arr[1],当然也就是整型了,当然还是那句话,具体情况具体分析。

二维数组

如图,我们定义了一个三行四列的二维数组(这个只是举例子,长度无所谓)
定义过程当然很简单就是int brr[3][4];

由于前两个概念需要使用到优先级的概念,所以在这里我把这张展示运算符优先级的表先放在这里:运算符优先级

int *p[4]与int (*p)[4]

在介绍之前,先区分两个易于混淆的概念,我们由运算符优先级可以知道的是在*的优先级在()与[]之后所以不加小括号的情况下,p优先与[]结合,就是一个数组,我们平常对一个指针变量的声明的时候例如int *p;我们可以看到为了区分与普通变量区分的一个星号,所以用一个这样的星号用在一个数组上则表示这是一个指针数组。那如果加了()代表什么呢?由于优先级,我们可以发现()内先与星号结合了,那么根据平时一个普通的指针变量的定义,这是一个指针,接着()内的部分与[]结合,这表示这是一个指向一个长度为4的一维数组的指针变量,注意的是,这是指向一个数组的指针,而不是指向数组首地址的指针哦!

brr

其实之前的介绍就是为接下来这些部分做铺垫的。二维数组名brr其实就是一个指向一个定长一维数组的指针,我可以将这个三行四列的二维数组看成三个一位数组,就像第一张图中表示的把二维数组分成了红蓝绿三条一维数组,而brr就是指向红色一维数组的指针了,也就是指向首行一维数组的指针。

brr+1

可以参照brr和arr+1,我们就可以知道,brr+1是指向下一行的一维数组的指针,也就是指向蓝色块的一维数组的指针了,当然以此类推,那么brr+2就是指向绿色块的一维数组的指针了。所以推广到任意的二维数组,只要在不逾越行数的情况下,brr+n就是指向第n+1行(因为行标是从0开始)的一维数组的指针。

brr[0]

数组名加上一个下标又变成了什么呢?其实有点类似的是我们可以看到在图的下方有一个等式arr == brr[0]这个式子当然只是一个助于理解的式子,其实意思就是说我们可以把brr[0]类比于arr也就是一维数组的数组名,因为0是第一行的行标,所以brr[0]其实就是指向首行首元素的指针变量,那么一次类推brr[n]就是指向n+1行的首元素的指针变量。

brr[0]+1

在brr[0]中我们可以将brr[0]类比于arr,那么我们也可以将brr[0]+1类比于arr+1,也就是说这是一个指向首行第二个元素的指针变量,以此类推,那么brr[n]+n那么这就是一个指向第n+1行第n+1个元素的指针变量。

brr[0][0]

这个就不用多介绍了,类比于arr[0]也就是首行首元素本身了,直接利用下标使用元素,是整型。

这就是全部的介绍了,多有疏漏,敬请批评指正!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值