2010-11-24 107 views
1

我有一些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

你能告诉其中`pts`定义? – casablanca 2010-11-24 18:33:33

回答

5

pts[i*3]相当于&pts[i*3][0],这是一个指针到2D阵列的i*3 RD行的第一个元素。同样,pts[hull*3]是指向数组第hull*3行的第一个元素的指针。

因此,函数cmppt将指针指向数组的两行。它不知道它正在查看哪些行,它只知道它正在查看行。

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)