2016-01-17 50 views
1

我有以下的LCD驅動器的代碼,而且我不確定如何調用該函數如何用結構數組調用函數?

typedef struct { 
    int16_t X; 
    int16_t Y; 
} Point, * pPoint; 

void LCD_PolyLine(pPoint Points, uint16_t PointCount) { 
    int16_t X = 0, Y = 0; 
    while(--PointCount) { 
    X = Points->X; 
    Y = Points->Y; 
    Points++; 
    LCD_DrawUniLine(X, Y, Points->X, Points->Y); 
    } 
} 

它沒有意義具有函數的第一個參數是「pPoint點」。對我來說,它似乎應該是「pPoint * Points」。然後我可以創建一個pPoints數組並將此地址傳遞給它。

你還會怎麼稱呼這個驅動功能而不修改它?

+3

在這種情況下,'pPoint'指向'Point'的指針(在技術上,指向'struct {...} '),所以你應該創建一個'Point'數組。 – slugonamission

+1

如這個問題所示,鍵入一個指針通常是一個糟糕的主意。我將在typedef的末尾刪除',* pPoint',並將函數聲明爲void void_P_PolLine(Point * Points,...' – user3386109

回答

1

使函數的第一個參數爲pPoint Points沒有任何意義。

它實際上非常有意義的,因爲pPoint被定義爲Point*,即指針Point。它相當於

void LCD_PolyLine(Point *Points, uint16_t PointCount) 

這是正確的簽名。所有你需要做的就是傳遞一個struct Point的數組,然後是元素的數量。

+0

啊我現在看到了!我創建了一個pPoint數組(即Point * *)這就是我爲什麼會產生混淆的原因。當我創建一個Point數組時,它完美地工作,謝謝! –

0

Point struct和typedef定義的最後一行中,它後面的逗號表示* pPoint。這是將pPoint類型定義爲Point *的符號。請注意0​​上的「p」是指針類型的通用符號。所以你是對的,你可以通常創建一個Point結構數組並將指針傳遞給該函數。 (注意不要傳遞指針的地址,這將是一個Point **。)