buffer
является указателем на массив unsigned char
, который используется для хранения необработанных пакетных данных.
Это переопределение типа buffer
в качестве указателя на struct iphdr
, поэтому вы можете присвоить его iph
и прочитать его как структуру. Технически это просто подавляет ошибку компилятора, которая говорит, что значение buffer
не может быть присвоено iph
, потому что они имеют разные типы, несмотря на то, что они оба являются указателями.
В качестве альтернативы, вы можете сделать buffer
типа void*
.
Указатель на void
может быть назначен на любой другой тип указателя без необходимости переделать его тип:
void* buffer = malloc(65536);
...
void ProcessPacket(void* buffer, int size) {
struct iphdr *iph = buffer;
...
}
Это называется литым ... любой учебник или ссылки на C будет охватывать его. Я настоятельно рекомендую, чтобы люди действительно читали книги о языках программирования, а не пытались запутаться. –