大家对二维数组的存储方式有许许多多奇怪的错误看法,这里来梳理一下
其实呢,二维数组的说法是不准确的,因为C/C++都不存在二维数组的数据结构,只不过一些入门教程为了让初学者快速理解产生的名词,所以在C/C++仅存在数组的数组的说法。所以说二维数组不过是方遍我们去理解的。
举个例子吧:
int nums[2][2] = {
{1, 2},
{2, 3}
};
这是一个很普通的二维数组,从某个维度上来理解(一切为了李姐)int x[2]与int nums[2][2等价,这里的x我们视为一种自定义数据类型 x 等于int a[2],好嘛,我们就可以认出所谓二维数组就是,一维数组类型的一维数组,二维数组也看可以看成一维数组,第一行数据为这个二维数组的首元素(二维数组的元素类型就是一维数组),行优先策略。
从上述论证中可以得出,二维数组是属于一维数组的(嗯,不好解释,自行理解),所以二维数组是满足一维数组中的属性的,例如:数组名代表数组的首地址,也可以代表数组的首元素地址。这样讲不直观,给大家演示一下吧。
可见nums与&nums[0]一致。
&num[1]与&nums[0]差值为8,可推出一行,一行进行存储的(如下图)
一维数组的数组名是一级指针,可推出二维数组的数组名也是一级指针。
推理方面有很多问题,论证有很多问题,大家看一下,有什么问题,可以评论,我会回答的。