西城专业网站建设公司哪家好保险公司网站查询
目录
1. 二维数组的定义:
2. 行主序存储:
具体内存排列:
3. 如何通过指针访问数据:
4. 总结:
在 C 语言中,二维数组是按 行主序(row-major order) 存储的。也就是说,数组的每一行按顺序存储在内存中,所有行按顺序依次存放在内存的连续区域。
1. 二维数组的定义:
假设有一个二维数组 axisData,它的定义如下:
float axisData[3][4];
 
这个数组有 3 行 4 列,总共有 12 个元素。二维数组 axisData 在内存中的存储方式如下:
2. 行主序存储:
数组中的数据在内存中的存储顺序是按行存储的。也就是说,首先存储的是第一行的所有元素,然后是第二行,接着是第三行,依此类推。
对于数组 axisData[3][4],它在内存中的布局如下:
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]
 
具体内存排列:
假设 axisData 在内存中的起始地址为 0x1000,那么它的内存布局将是:
| 内存地址 | 数据 | 
|---|---|
| 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] | 
在这个例子中,数据 axisData[0][0] 在 0x1000 地址上,axisData[0][1] 紧接着存储在 0x1004 地址上,依此类推,直到 axisData[2][3] 存储在 0x102C 地址上。
3. 如何通过指针访问数据:
由于二维数组是按行主序存储的,因此我们可以通过指针偏移的方式访问数组元素。比如,给定 axisData[3][4] 数组的起始地址 &axisData[0][0],数组元素将按以下方式访问:
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. 总结:
在 C 语言中,二维数组是按 行主序(row-major order) 存储的,即所有的行按照顺序连续存储在内存中。对于一个 mxn 的二维数组 arr[m][n],数组的第一个元素 arr[0][0] 存储在内存的起始位置,紧接着是 arr[0][1]、arr[0][2] 等,直到 arr[0][n-1]。然后,存储的是 arr[1][0]、arr[1][1],以此类推,直到 arr[m-1][n-1]。
