Чтобы было всё ОК менять надо явно больше одной строчки. Указатель-то на структуру, а продвигают его на какое-то количество байт. Нехорошо, ибо зависит от компилятора и его манер обращения со структурами, пусть даже и __attribute__ ((__packed__)).
Формально заменяется на pD = (USB_COMMON_DESCRIPTOR *) ((BYTE *)pD + pD->bLength); или pD += (pD->bLength)/sizeof(USB_COMMON_DESCRIPTOR);
в зависимости от того, что имел в виду автор.
P.S. Сообразил что, вероятно, имелось в виду. Если это разбирательство на нижнем уровне с последовательностью записей различной длинны, и всё это описано в виде количества байт и смещений в байтах от одного заголовка до следующего, то может быть так будет более естественно:
BYTE *p; #define bLength (0) #define bDescriptorType (1) BYTE *p; p += p[bLength]; if( p[bDescriptorType] == ... )
А если уж потребовалось поработать со структурой, то только тогда преобразовывать p в указатель на структуру.
--------------------
Russia est omnis divisa in partes octo.
|