看见这个题目,也许有些人就会嘀咕了:难道两者不是一样的吗?C语言的多维数组不就是数组的数组吗?不!两者是有区别的,而且还不小呢。首先看看两者的共同点:
1。内存映象一样。
2。数组引用方式一样,都是“数组名[下标][下标]........”。
3。数组名都是数组的首地址,都是一个符号地址常量、一个右值。
由于两者的共同点主要反映在外部表现形式上,因此,从外部看来,数组的数组跟多维数组似乎是一样的,这造成了C程序员对两者的区别长期以来模糊不清。但实际上,c语言限于本身的语言特性,实现的并非真正的多维数组,而是数组的数组。
数组的数组与多维数组的主要区别,就在于数组的数组各维之间的内在关系是一种鲜明的层级关系。上一维把下一维看作下一级数组,也就是数组嵌套。数组引用时需要层层解析,直到最后一维。
举个例,对于数组:
int
a[7][8][9];
如果要访问元素a[4][5][6],首先就要计算第一维元素4的地址,也就是a+4,由于是数组的数组,元素4的值代表了一个数组,因此元素4的值就是它所代表的那个数组的首地址,我们用一个符号address1代表它,也就是address1=*(a+4),接着计算第二维,显然元素5的地址是address1+5,其值也是一个数组的首地址,用address2表示它,就是address2=*(address1+5),最后一维,由于已经到达了具体的元素,因此这个元素的地址是address2+6,其值*(address2+6)是一个整数,把address1和address2分别代入相应表达式,就成了:
*(*(*(a+4)+5)+6);
这就是我们熟知的[]运算符的等价表达式。
而真正的多维数组并没有这么多“束缚”,相比之下简单得多,由于各维之间不是这种复杂的层级关系,元素a[4][5][6]的偏移量可以这样直接获得:(4x8x9+5x9+6)xsizeof(int),再加上数组的首地址a就是元素a[4][5][6]的地址了。但是,c语言的数组能够这样用首地址加上(4x8x9+5x9+6)xsizeof(int)的形式来访问元素吗?显然是不行的。归根到底就在于C语言的地址数据类型不但有类型,还具有级别。就是这种层级关系造成了C语言只能用数组的数组当作多维数组。如果C语言非得要实现真正的多维数组,那么地址与指针的概念就得重新改写了。
----------------------------------------------------------------------------------------------------------------------------
-------------------------卑微的分割线---------------------------------------------------------------转载:没油的猪
分享到:
相关推荐
数组的概念和定义 一维数组 多维数组 -- 二维数组 字符型数组和字符串型数组
多维数组下标计算多维数组下标计算多维数组下标计算多维数组下标计算多维数组下标计算多维数组下标计算
多维数组程序设计 多维数组程序设计 多维数组程序设计
易语言重定义多维数组源码,重定义多维数组,min,pInt,pInts,RtlCopyMemory,RtlMoveMemory
对C#中多维数组,进行学习.实现多维数组的输入和输出. 源码. 实现对多维数组的动态输入,和多维数组的输出.
VB 多维数组实例 VB 多维数组实例 VB 多维数组实例
易语言赋值定义多维数组源码,赋值定义多维数组
本例是在VS2010的环境中调试的,用的是C#语音主要是交错数组和多维数组的区别
介绍了数组、一维数组、二维数组、多维数组及其应用示例
js基础代码实现
本资源关于数据结构中的多维数组的设计与使用
交错数组和多维数组 本容收集的一些关于交错数组和多维数组介绍,希望大家踊跃下载!仅供参考!!
对多维数组,对象,进行去重,相同的值只保留一个,常见的new Set()和filter,只能去重一维数组,并不能进行深层的去重,逻辑:判断是否为对象,为对象判断是否为数组或是真的对象,递归一直筛选为值,判断首次...
matlab 三维 数组 matlab-多维数组
此实例解释了new动态创建多维数组的用法,还有包涵了多维数组指针的用法···
易语言子程序返回多维数组的实现方法源码,子程序返回多维数组的实现方法,返回列表框数组
matlab 三维 数组 数组 多维数组-创建多维数组-使用cat函数 算法开发、数据可视化、数据分析以及数值计算 Matlab课程 教程 进阶
以上这篇python numpy 一维数组转变为多维数组的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:python二维列表一维列表的互相转换实例Python的...
matlab 三维 数组 多维数组-创建多维数组-使用索引 算法开发、数据可视化、数据分析以及数值计算 Matlab课程 教程 进阶
matlab开发-多维数组的合并排序。使用合并排序技术对单个或多维数组进行排序。