Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебно-практическое пособие ПРОГ.doc
Скачиваний:
37
Добавлен:
20.11.2019
Размер:
5.63 Mб
Скачать

3.1.4.Оператор определения имени типа typedef

Новые имена типов данных в Си можно определять, используя ключевое слово typedef. На самом деле таким способом новый тип данных не создается, а всего лишь определяется новое имя для уже существующего типа. Этот процесс может помочь сделать машинно-зависимые программы более переносимыми. Если вы для каждого машинно-зависимого типа данных, используемого в вашей программе, определяете данное вами имя, то при компиляции для новой среды придется менять только операторы typedef.

Общий вид декларации typedef (оператора typedef) такой:

typedef тип новое_имя;

где тип — это любой тип данных языка Си, а новое_имя — новое имя этого типа. Новое имя является дополнением к уже существующему, а не его заменой.

Например, для float можно создать новое имя с помощью

typedef float balance;

Это выражение дает компилятору указание считать balance еще одним именем float. Затем, используя balance, можно создать переменную типа float:

balance over_due;

Теперь, когда имя balance определено, его можно использовать и в другом операторе typedef. Например, выражение

typedef balance overdraft;

дает компилятору указание признавать overdraft в качестве еще одного имени balance, которое в свою очередь является еще одним именем float.

Использование операторов typedef может облегчить чтение кода и его перенос на новую машину. Однако новый физический тип данных таким способом не создается.

Для создания новых типов в Си можно использовать массивы, указатели и структуры. Более детально структуры, вопросы конструирования новых типов и абстрактные типы данных будут рассмотрены позднее. Сейчас рассмотрим массивы и указатели.

3.1.5.Массивы

Массив представляет собой последовательность переменных одного типа. Доступ к элементу массива осуществляется по его номеру. Описание массива в Си состоит из имени базового типа, названия массива и его размера, который указывается в квадратных скобках. Размер массива обязательно должен быть целочисленной константой или константным выражением. Примеры:

int a[10];

char c[256];

double d[1000];

В первой строке описан массив целых чисел из 10 элементов. Подчеркнем, что нумерация в Си всегда начинается с нуля, так что индексы элементов массива изменяются в пределах от 0 до 9. Во второй строке описан массив символов из 256 элементов (индексы в пределах 0...255), в третьей - массив вещественных чисел из 1000 элементов (индексы в пределах 0...999). Для доступа к элементу массива указывается имя массива и индекс (номер) элемента в квадратных скобках, например,

a[9], c[255], d[123].

Функция sizeof() возвращает размер всего массива в байтах, а не в элементах массива. В данном примере

sizeof(a) = 10*sizeof(int) = 40,

sizeof(c) = 256*sizeof(char) = 256,

sizeof(d) = 1000*sizeof(double) = 8000.

При описании массива можно выполнить инициализацию его элементов:

double a[3]={5.2, 6.7, 3.1}};

У рассмотренной реализации массивов, есть один существенный недостаток: так можно реализовать только массивы, размер которых известен заранее, т.е. до начала работы программы на стадии компиляции.

Реализация массивов, размер которых становится известным на стадии выполнения программы, будет рассмотрен в теме 5.