数组与指针思考(2)

有任何不懂的问题可以评论区留言,能力范围内都会一一回答

本章节来自博主自身学习感受,评论区欢迎留言指出错误和讨论

我们知道一维数组可以这样写char arr[]={'a','b','c'},二维数组可以这样写char arr[][2]={'a','b','c','d'},但是为啥二维数组不可以这样写呢int arr[2][]={'a','b','c','d'},那三维数组呢,四维呢,n维呢?

因此我们必须许将这些表达式问为什么可以和为什么不行的底层逻辑搞清楚,我将会用以下几种方式将大家介绍。

第一种就是数组数组,最重要的是什么,当然是数组元素了,因此我们必须要明确数组元素的大小(或者说类型也可以因为元素类型确定了元素大小),

那么我们把n维数组看成一维数组,那么他的每一个元素大小都是一个n减一维数组,那么当n等于1的时候,它的元素就是一个0维的,在物理里面0维是一个抽像概念是没有大小的,换言之,你可以理解成,每个0维数组大小是相同的,所以一维数组可以char arr[]={'a','b','c'}这样表示,

举个例子char arr[]={'a','b','c'}中每个元素大小是char是明确的,

那如果n等于2呢,那么它的元素就是一个一维数组了,一维数组就有大小之之分了,比如int arr1[2][3],int arr2[2][4],那么,arr1代表其有2个元素,每个元素是一个有三个int大小的一维数组,arr代表其有2个元素,每个元素每个元素是一个有四个int大小的一维数组,

那设想如果我们不明确二维数组的第二个[],那么就会导致元素的大小是不确定的,你无法确定这个数组的元素大小是几个int大小,这就会导致数组元素大小不确定

因此们把n维数组看成一维数组,那么他的每一个元素大小都是一个n减一维数组,这个n-1维数组是n维数组的元素,因此这个n-1维数组大小必须明确,也就是除了第一个[]后面n-1个[]必须明确,因为第一个[]代表的是元素个数其他[]代表的是元素的大小,元素数量可以通过我们声明的值计算得到有几个元素,但是元素大小不能。

同样从数学角度说我们知道我们声明数的总大小,也知道每个元素大小,自然而然可以算出元素个数

第二种解释就很有意思了(当然仅解释二维数组)

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

1(arr3[0][0])2(arr3[0][1])3(arr3[0][2])4(arr3[1][0])5(arr3[1][1])6(arr3[1][2])

如果声明int arrl[][3]我们可以知道arrl[0][0],arrl[0][1],arrl[0][2],arrl[1][0]从左到右依次放置中间不会空,刚好放完了也就知道我们这个数组有几个元素了

那如果我们声明int arr4[2][]

如果我们放元素第一个放arr[0][0]第二个放arr[1][0]但是从上面知道由于明确了列我才知道arr[0][0]和arr[1][0]之间隔了多大的大小,我们如果int arr4[2][],我们将无法知道我们中间要空多大为位置,因此无法准确放入arr[1][0]

如果arrl[0][1],arrl[0][2],arrl[1][0]从左到右依次放置但是我们不知道arr[0]的大小是多少,如果我们放到arr[0][998]那就越界了,这是很危险的,且无法准确实现数组元素放置的.

本章看完后推荐看一维数组传参本质-CSDN博客

以及多维数组传参本质-CSDN博客

写的都是博主自身学习感受以及对知识点的理解

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值