реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> С/С++. Указатели, структуры и объединения., Расшифровка операторов со структурами.
Serhiy_UA
сообщение Jan 27 2010, 07:14
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Не думал, что придется сталкиваться с такими навороченными конструкциями, но пришлось. Помогите расшифровать следующий оператор:

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

И дополнительно:
Использую в качестве настольной, книгу Подбельский В.В. Язык Си++:Учебное пособие. –М.: Финансы и статистика, 2003. Но ее не хватило, для прояснения данного вопроса. Может, есть другие источники, где лучше поясняются подобные вещи?
Go to the top of the page
 
+Quote Post
Dima_G
сообщение Jan 27 2010, 07:27
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699



Цитата(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
А все в целом это является примером того, как не надо писать код

По С++ - читайте библию - Страуструпа

Сообщение отредактировал Dima_G - Jan 27 2010, 07:27
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jan 27 2010, 10:17
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(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-ому элементу массива.
Если мы видим (.) - то обращаемся к полю структуры непосредственно.
Если мы видим (->) - то обращаемся к полю структуры через указатель.
Вам нужно почитать про указатели и структуры. Фактически любой учебник по Си Вам откроет глаза:-)


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 27 2010, 12:12
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Dima_G @ Jan 27 2010, 11:27) *
А все в целом это является примером того, как не надо писать код

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

А мне кажется что ничего некрасивого здесь нет. Насколько я понимаю автор данной строчки разбирает какую то структуру, помещённую в стек, дабы выудить необходимую ему информацию. Для этого он обявил и расписал структуру объекта. Да она сложная, но возможно это не он её создавал. Он просто обращается. И обращается согласно структуре. Имена расписаны чётко и даже по одной строчке, в принципе видна общая структура данных. Так что тут вы увидели крамольного?
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Jan 27 2010, 13:37
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Спасибо всем ответившим и, в особенности, demiurg_spb! Стало понятно.

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

к demiurg_spb
Китайское изречение очень и очень мудрое, мне понравилось!
Go to the top of the page
 
+Quote Post
dxp
сообщение Jan 28 2010, 04:35
Сообщение #6


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



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

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

Тоже считаю примером, как не надо писать. Такой стиль кодирования называется write only. Лучше было бы хотя бы разбить на пару выражений. Читабельность намного повышается.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 28 2010, 07:32
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(dxp @ Jan 28 2010, 07:35) *
Читабельность намного повышается.

Читабельность отдельного выражения - несомненно да, а вот как это в общем контексте исходника смотреться будет, тут еще бабушка надвое сказала.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 28 2010, 11:24
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



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

Так я так полагаю (не видя текста), что так и сделано. Это именно первая часть. Обращение к нужному элементу. А далее по тесту уже пойдёт работа с этим элементом. Присваивается же в результате не элементарный integer, - это указатель на PCM_PARTIAL_RESOURCE_DESCRIPTOR. Который, в свою очередь имеет сложную структуру. И вот ниже по тексту идёт работа с полями этого дескриптора.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 21:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.02246 секунд с 7
ELECTRONIX ©2004-2016