Что означает это утверждение? - PullRequest
0 голосов
/ 05 сентября 2011

Примечание, в заголовочном файле содержится следующее:

typedef struct{
   void*       userData;
} ESContext;

и в исходном файле есть следующая структура:

typedef struct
{
   GLuint programObject;
} UserData;

Так что вот так. В том же исходном файле есть функция, которая начинается следующим образом:

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

Как этот последний отрывок звучит вокально, если его прочесть? Что это делает? Спасибо за любую помощь.

Ответы [ 3 ]

4 голосов
/ 05 сентября 2011

Он присваивает указатель esContext-> userData указателю userData.Язык C допускает неявное приведение между указателями void и указателями любого другого типа.

Возможно, вы захотите прочитать раздел C FAQ, касающийся указателей .

0 голосов
/ 05 сентября 2011

userData - указатель на UserData, которому назначено значение поля userData структуры, на которую указывает esContext.

UserData *userData = esContext->userData;

эквивалентно:

UserData *userData = (*esContext).userData;
0 голосов
/ 05 сентября 2011

Вы должны прочитать Правило спирали по часовой стрелке .Это поможет вам не только понять, как выразить это утверждение в хорошо читаемых словах, но и в любом другом утверждении C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...