在C中我们有二维数组,即a[m][n]
。
在一维数组a
中是指向数组开头的指针。
二维数组怎么样? a[i]
是否持有指向数组中i
行开头的指针?因此a[i]
是一个指针数组,在以下内容function(int **a, m, n)
中传递给函数?
答案 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] = ...;
,但该语法仅表示数组数组的大小取决于初始化列表中的项数。