在线二区人妖系列_国产亚洲欧美日韩在线一区_国产一级婬片视频免费看_精品少妇一区二区三区在线

鍍金池/ 問答/C/ c語言里二維數(shù)組是怎樣實(shí)現(xiàn)的?

c語言里二維數(shù)組是怎樣實(shí)現(xiàn)的?

以前一直以為二維數(shù)組是一個(gè)存儲(chǔ)一維數(shù)組的數(shù)組 每個(gè)元素都是子數(shù)組的頭指針
但是看了一篇文章 似乎是說并沒有這回事 a [3] [4]只是連續(xù)的12個(gè)空間 a是第一個(gè)空間的頭地址 a[0]是第一個(gè)一維數(shù)組的頭地址 也是第一個(gè)空間的地址 a[1]是第二個(gè)數(shù)組的頭地址 實(shí)際上是第5個(gè)空間的地址 多維數(shù)組只是把一個(gè)一維數(shù)組劃分成了很多小塊?
怎么理解才是對(duì)的呢?

回答
編輯回答
墻頭草

更新

補(bǔ)一個(gè) a[3][4] 的內(nèi)存分布

a = [3][4]
/* 內(nèi)存中 */

a[0] <-> [b[0], b[1], b[2], b[3]],
a[1] <-> [c[0], c[1], c[2], c[3]],
a[2] <-> [d[0], d[1], d[2], d[3]];

/* a 中元素指向的地址 */
a[00] -> b[0]
a[01] -> c[0]
a[02] -> d[0]
a[03] -> b[1]
a[04] -> b[2]
a[05] -> b[3]
a[06] -> c[1]
a[07] -> c[2]
a[08] -> c[3]
a[09] -> d[1]
a[10] -> d[2]
a[11] -> d[3]
...

所以 a[1] 指向的是 c[0](指向地址),而 c[0] 實(shí)質(zhì)上在整個(gè) a的內(nèi)存 中排第五位(內(nèi)存分布)

原答案

連續(xù) 說的是內(nèi)存中的分布

其實(shí)看內(nèi)存圖解的時(shí)候我也有點(diǎn)暈,做了一些思考后有如下猜測(cè):

一個(gè)二維數(shù)組,前幾個(gè)元素是記錄了幾個(gè)內(nèi)部一維數(shù)組的頭地址在整個(gè)外部一維數(shù)組中的偏移位置。

也就是說

a = [2][2]
/* 內(nèi)存中 */
a[0] -> b[0]
a[1] -> c[0]
a[2] -> b[0]
a[3] -> c[1]
...

因?yàn)閿?shù)組長(zhǎng)度是不可變的,一旦編譯,內(nèi)存地址直接分配,只要知道子數(shù)組的首地址,可以直接根據(jù)偏移快速定位:

a[n][m] -> a[n] + m

a[1][1] -> a[1] + 1 -> c[0] + 1 -> c[1]

對(duì)于多維數(shù)組的話:

a = [2][2][2]
/* 內(nèi)存中 */
a[0] -> b(0)[0] -> c[0]
a[1] -> b(1)[0] -> d[0]
a[2] -> b(0)[1] -> e[0]
a[3] -> b(1)[1] -> f[0]
a[4] -> c[1]
a[5] -> d[1]
a[6] -> e[1]
a[7] -> f[1]
...
a[x][y][z] -> a[x][y] + z -> (a[x] + y) + z

a[0][1][0] -> a[0][1] + 0 -> (a[0] + 1) + 0 -> c[0] + 1 -> c[1]

注: 對(duì)于 a[0] + 1 是說把 a[0] 指向的地址(也就是 c[0] )下移一次,不是代數(shù)運(yùn)算

如果有說錯(cuò)的還請(qǐng)大家斧正!

2017年4月6日 04:34
編輯回答
淺時(shí)光

這個(gè)可以參照其它地方的解釋:
http://blog.csdn.net/dhl0317/...

2018年6月30日 15:10