2011-09-05 72 views
0

一個foremention,下面是一個頭文件:這個說法是什麼意思?

typedef struct{ 
    void*  userData; 
} ESContext; 

,並在源文件中,有以下結構:

typedef struct 
{ 
    GLuint programObject; 
} UserData; 

所以這裏去。在相同的源文件中,有這樣爲開頭的函數:

void Draw (ESContext *esContext) 
{ 
    UserData *userData = esContext->userData; 
    ... 
} 

如何,去年喀嚓聲出來大聲疾呼,如果你讀它了嗎?它在做什麼?謝謝你的幫助。

+2

「讓'userData'一個指向'esContext'的'userData'」 – BoltClock

+0

.....謝謝! –

回答

4

它將指針esContext-> userData指定給指針userData。 C語言允許在void指針和任何其他類型的指針之間進行隱式轉換。

您可能想要閱讀C FAQ relating to Pointers的部分。

+0

感謝您回答這個問題和FAQ鏈接。我討厭在這個網站上選擇最好的答案,原因很多。這些答案中的每一個都有幫助。 Even甚至進入了我需要的一些細節:「......分配了價值......」 –

+0

我不喜歡玩最愛的另一個原因是因爲我有時不知道最佳答案是什麼。我希望該網站不鼓勵授予這些獎牌。 –

0

您應該閱讀Clockwise Spiral Rule。它不僅可以幫助你理解如何把這個陳述寫入很好的單詞中,而且還可以用其他的C語句。

+0

........謝謝。 –

0

userData是指向UserData的指針,該指針指定esContext指向的結構的userData字段的值。

UserData *userData = esContext->userData; 

等同於:

UserData *userData = (*esContext).userData; 
+0

非常有幫助!謝謝! –

+0

但我只是困惑,因爲在頭文件中,.userData成員var本身被定義爲void指針。 –

+0

'esContext-> userData'的類型是指向void的指針,可以隱式轉換爲任何其他類型。你對什麼感到困惑? –