C语言与Java的多维数组在存储结构上的不同

之前学习Java时了解到的多维数组的存储是:
引用在栈当中,而数组则在堆当中,如下图所示
C语言与Java的多维数组在存储结构上的不同

而今天数据结构老师讲解c的数组时,讲到的数组我发现用上面的结构根本无法带入进去,原来是因为c语言中整个数组都是在栈当中的,而多维数组虽然在逻辑结构上是多维的,但是在存储结构上依旧是一维数组,这种存储结构如下图所示
C语言与Java的多维数组在存储结构上的不同

其实这两者就是下图中的Way 1 和 Way 2 了。Way 1 就是java所采用的存储方式,这个”数组的数组“的描述就很贴切。需要注意的是如果在c语言中使用动态内存分配去使用数组,采用的也是 way 1 的这种方式。而c语言的数组就是 Way 2 这种存储方式。从上面的两张图其实很容易就能够看出这两者的区别,Way 1 相对于 Way 2 来说,增加堆内最上方的那个一维数组,这个一维数组内存储的其实就是下方各个一维数组的地址。而Way 2 则没有这个一维数组,所谓的二维其实就是一个一维数组,通过计算可以得到想要下标的空间内存储的值。
C语言与Java的多维数组在存储结构上的不同