引用二维数组的一个维度

时间:2010-11-24 18:32:12

标签: c

我有一些效果很好的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]查看数组第一维的第二个元素,但这没有意义。

谢谢

2 个答案:

答案 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)