2011-09-05 142 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的指针,可以隐式转换为任何其他类型。你对什么感到困惑? –