Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: С/С++. Указатели, структуры и объединения.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Serhiy_UA
Не думал, что придется сталкиваться с такими навороченными конструкциями, но пришлось. Помогите расшифровать следующий оператор:

PCM_PARTIAL_RESOURCE_DESCRIPTOR pPartialDescriptors = &IOStack->Parameters.StartDevice.AllocatedResourcesTranslated->List->PartialResourceList.PartialDescriptors[i];

И дополнительно:
Использую в качестве настольной, книгу Подбельский В.В. Язык Си++:Учебное пособие. –М.: Финансы и статистика, 2003. Но ее не хватило, для прояснения данного вопроса. Может, есть другие источники, где лучше поясняются подобные вещи?
Dima_G
Цитата(Serhiy_UA @ Jan 27 2010, 11:14) *
PCM_PARTIAL_RESOURCE_DESCRIPTOR pPartialDescriptors = &IOStack->Parameters.StartDevice.AllocatedResourcesTranslated->List->PartialResourceList.PartialDescriptors[i];


PartialDescriptors - массив указателей типа PCM_PARTIAL_RESOURCE_DESCRIPTOR , который является членом PartialResourceList, который является членом List.... является членом IOStack
А все в целом это является примером того, как не надо писать код

По С++ - читайте библию - Страуструпа
demiurg_spb
Цитата(Serhiy_UA @ Jan 27 2010, 10:14) *
PCM_PARTIAL_RESOURCE_DESCRIPTOR pPartialDescriptors = &IOStack->Parameters.StartDevice.AllocatedResourcesTranslated->List->PartialResourceList.PartialDescriptors[i];
Объявляется и инициализируется переменная pPartialDescriptors типа PCM_PARTIAL_RESOURCE_DESCRIPTOR - это указатель.
Так этот указатель, по сути, инициализируется адресом переменной PartialDescriptors[i], которая входит в состав структуры IOStack.
IOStack - весльма сложная структура.
Если мы видим (&) - то происходит взятие адреса переменной.
Если мы видим ([i]) - то обращаемся к i-ому элементу массива.
Если мы видим (.) - то обращаемся к полю структуры непосредственно.
Если мы видим (->) - то обращаемся к полю структуры через указатель.
Вам нужно почитать про указатели и структуры. Фактически любой учебник по Си Вам откроет глаза:-)
SasaVitebsk
Цитата(Dima_G @ Jan 27 2010, 11:27) *
А все в целом это является примером того, как не надо писать код

А зачем вы такие выводы делаете? Да тем более по одной строчке.

А мне кажется что ничего некрасивого здесь нет. Насколько я понимаю автор данной строчки разбирает какую то структуру, помещённую в стек, дабы выудить необходимую ему информацию. Для этого он обявил и расписал структуру объекта. Да она сложная, но возможно это не он её создавал. Он просто обращается. И обращается согласно структуре. Имена расписаны чётко и даже по одной строчке, в принципе видна общая структура данных. Так что тут вы увидели крамольного?
Serhiy_UA
Спасибо всем ответившим и, в особенности, demiurg_spb! Стало понятно.

Это я пытаюсь подступиться к написанию приложения и драйвера в WinXP для своей PCI-платы.
Структура взята из предлагаемых примеров, видимо, их пишут программисты экстра-класса.

к demiurg_spb
Китайское изречение очень и очень мудрое, мне понравилось!
dxp
Цитата(SasaVitebsk @ Jan 27 2010, 18:12) *
А зачем вы такие выводы делаете? Да тем более по одной строчке.

А мне кажется что ничего некрасивого здесь нет. Насколько я понимаю автор данной строчки разбирает какую то структуру, помещённую в стек, дабы выудить необходимую ему информацию. Для этого он обявил и расписал структуру объекта. Да она сложная, но возможно это не он её создавал. Он просто обращается. И обращается согласно структуре. Имена расписаны чётко и даже по одной строчке, в принципе видна общая структура данных. Так что тут вы увидели крамольного?

Тоже считаю примером, как не надо писать. Такой стиль кодирования называется write only. Лучше было бы хотя бы разбить на пару выражений. Читабельность намного повышается.
zltigo
Цитата(dxp @ Jan 28 2010, 07:35) *
Читабельность намного повышается.

Читабельность отдельного выражения - несомненно да, а вот как это в общем контексте исходника смотреться будет, тут еще бабушка надвое сказала.
SasaVitebsk
Цитата(dxp @ Jan 28 2010, 08:35) *
Тоже считаю примером, как не надо писать. Такой стиль кодирования называется write only. Лучше было бы хотя бы разбить на пару выражений. Читабельность намного повышается.

Так я так полагаю (не видя текста), что так и сделано. Это именно первая часть. Обращение к нужному элементу. А далее по тесту уже пойдёт работа с этим элементом. Присваивается же в результате не элементарный integer, - это указатель на PCM_PARTIAL_RESOURCE_DESCRIPTOR. Который, в свою очередь имеет сложную структуру. И вот ниже по тексту идёт работа с полями этого дескриптора.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.