【发布时间】:2020-02-26 17:34:52
【问题描述】:
所以我在研究二维数组,发现既然它们是连续存储的,就像一维数组为什么索引不冲突那里?
这是我的二维阵列的图示
在这里我试图模仿它在内存中的表示方式。
现在假设 arr[0][0] 位于 x0001 内存位置,那么当我尝试访问显然是越界索引的 arr[0][3] 时,如何它向我显示了错误。
我正在使用以下公式进行索引 -
(n*m+c)+B 用于索引位置
- n = 当前行
- m = 总列数
- c = 当前列
- B = 数据类型的大小(为简单起见,假设 B = 1)
现在对于 arr[0][3] 和 arr[1][0] 公式 (n*m+c)+B 的输出是相同的(3),如果我们将该值添加到初始指针(x0001),那么我们将获得相同的内存地址(x0001+3=x0004) 然后语句 arr[1][0] 为何返回 13(x0004 处的值) 但 arr[0][3] 返回索引超出范围错误。
假设
由于我不清楚二维数组中的内存是如何工作的,所以我假设了以下几点
- 公式
(n*m+c)+B用于实际使用,而不仅仅是理论上理解二维数组的工作原理。 - 地址是连续的,从初始单元格开始计数,即 & of arr[0][0] => (x0001)
【问题讨论】:
标签: arrays memory multidimensional-array data-structures