2D矩阵是一个指针数组吗?

时间:2014-05-17 16:32:59

标签: c++ c arrays pointers

假设我有2D数组,例如:

A[3][10];

这是否意味着它是一个由3个指针组成的数组? (每个人都指向10个元素中的1个)

所以A是指向3个指针中的1个的指针吗?

2 个答案:

答案 0 :(得分:4)

没有

这意味着它是一个包含3个数组的数组,其中每个数组都是一个包含10个元素的数组。

如果有帮助,您可以将其视为一个包含编译器支持的30个元素的大型一维数组,允许您使用二维索引(编译器执行必要的计算以将索引转换为平面索引)。实际上,这实际上就是它的实现方式。

答案 1 :(得分:2)

不,它不是3个指针的数组。查看内存表示:

A[3][10]
=
|_|_|_|_|_|_|_|_|_|_|  |_|_|_|_|_|_|_|_|_|_|  |_|_|_|_|_|_|_|_|_|_|
                   ^    ^
                  px   px+4

也就是说,A是一个包含3个数组的数组,每个数组包含10个元素。这三个数组在内存中是连续的。也就是说,A[0][9]之后的元素是A[1][0]

当然,正如克里斯所说,不要将数组与指针混淆。