2010-11-24 64 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)