矩阵索引的自动更新?

时间:2015-02-18 23:25:05

标签: c matrix

我有一个4x4矩阵并在其上做一些事情。经过一些测试后,我的印象是第一个坐标会根据第二个坐标值自动递增/递减,即使这似乎是不可能的。为了说清楚,我进行了最基本的测试:打印。

令我惊讶的是,事实证明(第一个)坐标是根据第二个值自动调整的,也就是说,下面的代码在一行中打印所有矩阵的元素,没有任何段错误:

for (int j = 0; j < 16; j++)
    printf("%d ", mx[0][j])

我的第一件事就是编译器可能进行的优化,但结果与最基本的设置相同。

请解释发生了什么。

1 个答案:

答案 0 :(得分:1)

实际上,在声明(而不是动态内存分配的产品)上定义的C多维数组由内存中的连续行构成。所以,

mx[0]

mx数组的基址(仅与mx相同)。访问内存位置的公式是

row_index * nr_columns + column_index

(您可以很容易地理解为什么两种访问此阵列的方式都相同)。

正如所说的那样,虽然你所做的是未定义的行为,但编译器根本不关心,如果你愿意,可以让你破解。