2015-05-13 5 views
-2

Я довольно сильно запутался в указателях в структурах. У меня есть кусок кода, который я действительно не понимаю полностью еще, код:Указатель структуры

typedef struct{ 
    int fildes // basic file descriptor 
    char* location // location would be somewhere in /dev/tty* 
}context0; // structure named 'context' containing the 2 elements above. 

context0 someContext; // create a context struct 

process(&readLocation); // takes reference from the function 'readlocation' 
// i do not know what this process function does. 

uint_16_t readLocation(int8_t *buffer, int16_t n, SomeContext){ // buffer pointer, n size read, and fidles 
context0 foo = *(context0*) SomeContext; // ???? What Is Going ON right here ???? 
return read(foo.fd, buffer, n); 
} 

Я изменил некоторые из имен, но его код, который я не в полной мере понять.

Некоторые вопросы:

  • поскольку readLocation функция передается в качестве ссылки не должен он быть определен как void*? infront of uint_32_t

  • главный вопрос: что делает context0 foo = * (context0*) SomeContext;?

+1

Это не действительный кусок кода C++. «SomeContext» должен быть типом или переменной. Если это переменная, что такое тип ts? –

+0

someContext - это структура типа context0, если будет добавлен другойконтекст someContext, можно рассматривать как контекст для последовательного ввода, где считывается, а другойContext будет последовательным выходом, где будет записано значение – iBeyondPower

+0

. В противном случае: вопрос 1: нет, любой тип функции может быть передан как параметр. вопрос 2: это похоже на приведение к типу указателя 'context0 *' и разыменование. (Но, как я уже сказал, это не действительный код в первую очередь.) –

ответ

0

нормально, так что кажется, что (context0 *) является Infact напечатанный, который делается (Int) бар, чтобы установить какой-либо другой тип к типу «» междунар. это делается для установки переменной bar в тип контекста.

Этот тип также может быть выполнен с использованием типа указателя, который будет выполнен как (int *) или (имя структуры *), или в этом случае (context0 *).

lastly указатель за пределами parenthisis разыгрывает указатель структуры, чтобы получить доступ к тому, на что он указывает, и помещает эту информацию в struct context0 foo.

Почему это необязательно, я не знаю, но синтаксис указывает на это.

спасибо, ой ур приветствовать нп

и поблагодарить у Габор Angyal, но не может дать пунктов или независимо от уровня 1

Смежные вопросы