我有一些效果很好的C代码,但我不理解代码的一部分。在这一部分中,它传递一个方法,指向二维数组,只指定了一个维度。
这是:
if (cmppt(pts[i*3], pts[hull*3]))
hull = i;
方法cmppt如下所示:
inline bool cmppt(const float* a, const float* b) {
if (a[0] < b[0]) return true;
if (a[0] > b[0]) return false;
if (a[2] < b[2]) return true;
if (a[2] > b[2]) return false;
return false;
}
数组pts是一个二维数组。我的问题是,当方法传递给两个数组时,例如pts [3]和pts [0]我怎么知道它看到的数组的哪个部分?似乎pts [0]查看数组第一维的第一个元素,pts [3]查看数组第一维的第二个元素,但这没有意义。
谢谢
答案 0 :(得分:5)
pts[i*3]
等同于&pts[i*3][0]
,它是指向2D数组的i*3
行的第一个元素的指针。同样,pts[hull*3]
是指向数组hull*3
行的第一个元素的指针。
因此,函数cmppt
将指针指向数组的两行。它不知道它正在查看哪些行,它只知道它正在查看行。
答案 1 :(得分:1)
因为当你说pts [i * 3]你真正说的是pts [i * 3] []时。 2维数组有行和列......你把它传给了行。
你的数组(锯齿状)看起来像这样:
int[][] pts =
{
new int[]{ 0, 1, 2, 3, 4, 5},
new int[]{ 0, 1, 2, 3, 4, 5},
new int[]{ 0, 1, 2, 3, 4, 5},
new int[]{ 0, 1, 2, 3, 4, 5},
new int[]{ 0, 1, 2, 3, 4, 5},
new int[]{ 0, 1, 2, 3, 4, 5}
};
然后你将它传递给这样的函数基本上:
cmppt(int[] a, int[] b)