C二维数组:第一个'级别'是一个指针数组吗?

时间:2015-02-16 11:26:06

标签: c pointers multidimensional-array

在C中我们有二维数组,即a[m][n]

在一维数组a中是指向数组开头的指针。

二维数组怎么样? a[i]是否持有指向数组中i行开头的指针?因此a[i]是一个指针数组,在以下内容function(int **a, m, n)中传递给函数?

2 个答案:

答案 0 :(得分:2)

  

a [i]是否持有指向数组中i行开头的指针?

没有。 C中的2D数组的数据是连续的元素块加上一些聪明的索引访问。但是2D数组是一个数组数组,而不是一个指针数组。

正式地,a[i]拥有一维数组。在某些上下文中,这可能会衰减为指向第i行的第一个元素的指针,但对于某些未指定的类型T[n],其类型仍为T

答案 1 :(得分:1)

  

在一维数组中,a是指向数组开头的指针。

不正确。 a数组。当您在表达式中使用a时,它会衰减"到指向第一个元素的指针。为了更好地理解这一点,read this chapter of the C FAQ,尤其是this one

  

二维数组怎么样? a [i]是否在数组中保存指向i行开头的指针?

没有。在2D数组中,a[i]是一个数组,而int a[x][y];是一个数组数组。在任何地方都没有指针。

您可能会感到困惑,因为C允许使用以下语法:int a[][N] = ...;,但该语法仅表示数组数组的大小取决于初始化列表中的项数。