Книга: Язык Си - руководство для начинающих
ПРИЧУДЛИВЫЕ ОПИСАНИЯ
ПРИЧУДЛИВЫЕ ОПИСАНИЯ
Язык Си позволяет вам создавать сложные формы данных. Обычно мы придерживаемся более простых форм, но считаем споим долгом указать ни потенциальные возможности языка. При создании описания мы используем имя (или "идентификатор"), которое можно изменять при помощи модификатора:
Модификатор | значение | ||
---|---|---|---|
* | указатель | ||
( ) | функция | ||
[ ] | массив |
Язык Си позволяет использовать одновременно более одного модификатора, что даст возможность создавать множество типов:
int board[8] [8]; /* массив массивов типа int */
int **ptr; /* указатель на указатель на тип int */
int *risks[10]; /* 10-элементный массив указателей на тип int */
int (*wisks) [10]; /* указатель на 10-элемснтный массив типа int */
int *oof[3] [4]: /* 3-элементныи массив указателей на 4-элементный
массив типа int */
int (*uuf) [3][4]; /* указатель на массив 3х4 типа int */
Для распутывания этих описаний нужно понять, в каком порядке следует применять модификаторы. Три правила помогут вам справиться с этим.
1. Чем ближе кодификатор стоит к идентификатору, тем выше его приоритет.
2. Модификатиры [ ] и ( ) имеют приоритет выше, чем *.
3. Круглые скобки используются для объединения частей выражения, имеющих самый высокий приоритет.
Давайте применим эти правила к описанию int *oof[3] [4];
* и [3] примыкают к oof и имеют более высокий приоритет, чем [4] (правило 1). [3] имеет приоритет более высокий, чем * (правило 2). Следовательно, oof является 3-элементным массивом (перпый МОДИФИКАТОР) указателей (второй модификатор) на 4-элементный массив (третий модификатор) типа int (описание типа).
В описании
int (*uuf)[3][4];
скобки говорят, что модификатор * должен иметь первый приоритет, а это делает uuf указателем, как показано в предыдущем описании. Эти правила создают также следующие типы:
char *fump( ); /* функция, возвращающая указатель на тип char */
char (*frump) ( ); /* указатель на функцию, возвращающую тип char */
char *flump ( ) [3] /* функция, возвращающая указатель на 3-элементный
массив типа char */
char *flimp[3] ( ) /* 3-элементный массив указателей на функцию, которая
возвращает тип char */
Если вы примените структуры к этим примерам, то увидите, что возможности для описаний действительно растут причудливо. А применения ... так и быть, МЫ оставим их для более опытных программистов.
Язык Си со структурами, объединениями и typedef дает нам средства для эффективной и мобильной обработки данных.
- ТИПОВАЯ ЗАДАЧА: ИНВЕНТАРИЗАЦИЯ КНИГ
- УСТАНОВКА СТРУКТУРНОГО ШАБЛОНА
- ОПРЕДЕЛЕНИЕ СТРУКТУРНЫХ ПЕРЕМЕННЫХ
- ДОСТУП К ЭЛЕМЕНТАМ СТРУКТУРЫ
- МАССИВЫ СТРУКТУР
- ВЛОЖЕННЫЕ СТРУКТУРЫ
- УКАЗАТЕЛИ НА СТРУКТУРЫ
- II. ОПЕРАЦИЯ КОСВЕННОГО ПОЛУЧЕНИЯ ЭЛЕМЕНТА: ->
- ПЕРЕДАЧА ИНФОРМАЦИИ О СТРУКТУРАХ ФУНКЦИЯМ
- СТРУКТУРЫ: ЧТО ДАЛЬШЕ?
- ОБЪЕДИНЕНИЯ - КРАТКИЙ ОБЗОР
- typedef - КРАТКИЙ ОБЗОР
- ПРИЧУДЛИВЫЕ ОПИСАНИЯ
- ЧТО ВЫ ДОЛЖНЫ БЫЛИ УЗНАТЬ В ЭТОЙ ГЛАВЕ
- ВОПРОСЫ И ОТВЕТЫ
- УПРАЖНЕНИЯ
- 5.5. ПРИМЕР РАЗРАБОТКИ ОПИСАНИЯ ПРОЦЕССА "КИПЯЧЕНИЕ ВОДЫ В ЧАЙНИКЕ"
- 11.5. Файлы описания зон
- Проверка правописания
- Настройка параметров правописания
- Формирование описания зоны
- Модуль описания матрицы предшествования и правил исходной грамматики
- Модуль описания структур данных для триад
- 3.1. Внутренняя структура описания уровней зрелости
- Рис. 122. Параметры правописания.
- ГЛАВА 6. ИСПОЛЬЗОВАНИЕ СТРАНИЦ ОПИСАНИЯ КЛЮЧЕВЫХ ПРАКТИК
- 1.4.2. Метод описания процессов IDEF3
- Язык описания задачника