答案 0 :(得分:6)
因为数组在传递给函数时会衰减指针。如果你没有提供数组第二维的基数,编译器就不会知道如何取消引用这个指针。
这是一个更长的解释:当你写这个
p[index]
编译器执行一些指针算法来查找它需要引用的元素的地址:它将index
乘以p
元素的大小,并将其添加到基址p
:
address = <base address of p> + index * <size of p's element>
当您尝试传递这样的数组p[][]
时,编译器只知道p
的基址,而不知道其元素的大小。这是为了让编译器知道你需要提供第二维基数的p
元素的大小。
答案 1 :(得分:2)
因为2D数组是按行存储的,因此函数需要列数,以便它知道下一行的开始时间。
答案 2 :(得分:1)
那是因为指针中的计算需要这样做。
当p指向大小为SIZE
的2维数组时,此操作p+=3
将以这种方式计算:
如果p的值是常数,则等于ADRESS p接收此值ADRESS + 3 * SIZE。
这是因为指针中的arithmitic与实数中的arithmitic不同。如果不知道数组的大小,就无法进行此计算。