網(wǎng)站托管公司站長工具外鏈查詢
目錄
1. 二維數(shù)組的定義:
2. 行主序存儲(chǔ):
具體內(nèi)存排列:
3. 如何通過指針訪問數(shù)據(jù):
4. 總結(jié):
在 C 語言中,二維數(shù)組是按 行主序(row-major order) 存儲(chǔ)的。也就是說,數(shù)組的每一行按順序存儲(chǔ)在內(nèi)存中,所有行按順序依次存放在內(nèi)存的連續(xù)區(qū)域。
1. 二維數(shù)組的定義:
假設(shè)有一個(gè)二維數(shù)組 axisData
,它的定義如下:
float axisData[3][4];
這個(gè)數(shù)組有 3 行 4 列,總共有 12 個(gè)元素。二維數(shù)組 axisData
在內(nèi)存中的存儲(chǔ)方式如下:
2. 行主序存儲(chǔ):
數(shù)組中的數(shù)據(jù)在內(nèi)存中的存儲(chǔ)順序是按行存儲(chǔ)的。也就是說,首先存儲(chǔ)的是第一行的所有元素,然后是第二行,接著是第三行,依此類推。
對(duì)于數(shù)組 axisData[3][4]
,它在內(nèi)存中的布局如下:
axisData[0][0], axisData[0][1], axisData[0][2], axisData[0][3],
axisData[1][0], axisData[1][1], axisData[1][2], axisData[1][3],
axisData[2][0], axisData[2][1], axisData[2][2], axisData[2][3]
具體內(nèi)存排列:
假設(shè) axisData
在內(nèi)存中的起始地址為 0x1000
,那么它的內(nèi)存布局將是:
內(nèi)存地址 | 數(shù)據(jù) |
---|---|
0x1000 | axisData[0][0] |
0x1004 | axisData[0][1] |
0x1008 | axisData[0][2] |
0x100C | axisData[0][3] |
0x1010 | axisData[1][0] |
0x1014 | axisData[1][1] |
0x1018 | axisData[1][2] |
0x101C | axisData[1][3] |
0x1020 | axisData[2][0] |
0x1024 | axisData[2][1] |
0x1028 | axisData[2][2] |
0x102C | axisData[2][3] |
在這個(gè)例子中,數(shù)據(jù) axisData[0][0]
在 0x1000
地址上,axisData[0][1]
緊接著存儲(chǔ)在 0x1004
地址上,依此類推,直到 axisData[2][3]
存儲(chǔ)在 0x102C
地址上。
3. 如何通過指針訪問數(shù)據(jù):
由于二維數(shù)組是按行主序存儲(chǔ)的,因此我們可以通過指針偏移的方式訪問數(shù)組元素。比如,給定 axisData[3][4]
數(shù)組的起始地址 &axisData[0][0]
,數(shù)組元素將按以下方式訪問:
axisData[0][0]
是&axisData[0][0]
。axisData[0][1]
是&axisData[0][0] + 1
。axisData[0][2]
是&axisData[0][0] + 2
。axisData[0][3]
是&axisData[0][0] + 3
。axisData[1][0]
是&axisData[0][0] + 4
。axisData[1][1]
是&axisData[0][0] + 5
。- ...
4. 總結(jié):
在 C 語言中,二維數(shù)組是按 行主序(row-major order) 存儲(chǔ)的,即所有的行按照順序連續(xù)存儲(chǔ)在內(nèi)存中。對(duì)于一個(gè) mxn
的二維數(shù)組 arr[m][n]
,數(shù)組的第一個(gè)元素 arr[0][0]
存儲(chǔ)在內(nèi)存的起始位置,緊接著是 arr[0][1]
、arr[0][2]
等,直到 arr[0][n-1]
。然后,存儲(chǔ)的是 arr[1][0]
、arr[1][1]
,以此類推,直到 arr[m-1][n-1]
。