php网站后台登陆地址,新手如何做网站维护,活动营销,wordpress 采集 发布目录
1. 二维数组的定义#xff1a;
2. 行主序存储#xff1a;
具体内存排列#xff1a;
3. 如何通过指针访问数据#xff1a;
4. 总结#xff1a; 在 C 语言中#xff0c;二维数组是按 行主序#xff08;row-major order#xff09; 存储的。也就是说#xff0c…目录
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那么它的内存布局将是
内存地址数据0x1000axisData[0][0]0x1004axisData[0][1]0x1008axisData[0][2]0x100CaxisData[0][3]0x1010axisData[1][0]0x1014axisData[1][1]0x1018axisData[1][2]0x101CaxisData[1][3]0x1020axisData[2][0]0x1024axisData[2][1]0x1028axisData[2][2]0x102CaxisData[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]。