русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Указатели на структуры


Дата добавления: 2015-01-16; просмотров: 479; Нарушение авторских прав


Чтобы проиллюстрировать некоторые соображения, связанныес использованием указателей и массивов структур, давайтеснова составим программу подсчета ключевых строк, используяна этот раз указатели, а не индексы массивов. Внешнее описание массива KEYTAB не нужно изменять, нофункции MAIN и BINARY требуют модификации. MAIN() /* COUNT C KEYWORD; POINTER VERSION */ \( INT T; CHAR WORD[MAXWORD]; STRUCT KEY *BINARY(), *P; WHILE ((T = GETWORD(WORD, MAXWORD;) !=EOF) IF (T==LETTER) IF ((P=BINARY(WORD,KEYTAB,NKEYS)) !=NULL) P->KEYCOUNT++; FOR (P=KEYTAB; P>KEYTAB + NKEYS; P++) IF (P->KEYCOUNT > 0) PRINTF("%4D %S/N", P->KEYCOUNT, P->KEYWORD); \) STRUCT KEY *BINARY(WORD, TAB, N) /* FIND WORD */ CHAR *WORD /* IN TAB[0]...TAB[N-1] */ STRUCT KEY TAB []; INT N; \( INT COND; STRUCT KEY *LOW = &TAB[0]; STRUCT KEY *HIGH = &TAB[N-1]; STRUCT KEY *MID; WHILE (LOW <= HIGH) \( MID = LOW + (HIGH-LOW) / 2; IF ((COND = STRCMP(WORD, MID->KEYWORD)) < 0) HIGH = MID - 1; ELSE IF (COND > 0) LOW = MID + 1; ELSE RETURN(MID); \) RETURN(NULL); \) Здесь имеется несколько моментов, которые стоит отме-тить. Во-первых, описание функции BINARI должно указывать,что она возвращает указатель на структуру типа KEY, а не нацелое; это объявляется как в функции MAIN, так и в BINARY.Если функция BINARI находит слово, то она возвращает указа-тель на него; если же нет, она возвращает NULL. Во-вторых, все обращения к элементам массива KEYTAB осу-ществляются через указатели. Это влечет за собой одно сущес-твенное изменение в функции BINARY: средний элемент большенельзя вычислять просто по формуле MID = (LOW + HIGH) / 2 потому что сложение двух указателей не дает какого-нибудьполезного результата (даже после деления на 2) и в действи-тельности является незаконным. эту формулу надо заменить на MID = LOW + (HIGH-LOW) / 2 в результате которой MID становится указателем на элемент,расположенный посередине между LOW и HIGH. Вам также следует разобраться в инициализации LOW иHIGH. указатель можно инициализировать адресом ранее опреде-ленного объекта; именно как мы здесь и поступили. В функции MAIN мы написали FOR (P=KEYTAB; P < KEYTAB + NKEYS; P++) Если P является указателем структуры, то любая арифметика сP учитывает фактический размер данной структуры, так что P++увеличивает P на нужную величину, в результате чего P указы-вает на следующий элемент массива структур. Но не считайте,что размер структуры равен сумме размеров ее членов, - из-затребований выравнивания для различных объектов в структуремогут возникать "дыры". И, наконец, несколько второстепенный вопрос о форме за-писи программы. Если возвращаемая функцией величина имееттип, как, например, в STRUCT KEY *BINARY(WORD, TAB, N) Tо может оказаться, что имя функции трудно выделить средитекста. В связи с этим иногда используется другой стиль за-писи: STRUCT KEY * BINARY(WORD, TAB, N) Это главным образом дело вкуса; выберите ту форму, котораявам нравится, и придерживайтесь ее.


<== предыдущая лекция | следующая лекция ==>
Массивы сруктур | Структуры, ссылающиеся на себя


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.161 сек.