Оператор typedef
Описания, подобные описаниям предыдущего раздела, достаточно сложны для понимания. Для упрощения описаний сложных типов в языке Си предусмотрен оператор typedef. Его использование иллюстрируется следующим синтаксисом:
БНФ:
typedef описание_одного_имени
Под описанием_одного_имени подразумевается любое, сколь угодно сложное описание данного. Но в этом случае имя будет обозначать не имя данного, а имя нового типа, который соответствует типу данного и может быть использован в качестве имени типа в любых других определениях данных. Рассмотрим пример:
typedef double DArray[100];
...
DArray A, B, C;
Если бы в первом описании отсутствовало бы ключевое слово typedef, то имя DArray представляло бы имя массива из 100 элементов типа double, для которого бы выделялся соответствующий объем памяти. При наличии typedef компилятор будет воспринимать имя DArray как имя нового типа данных, а именно, типа массива из 100 элементов типа double. Очевидно, никакой памяти при этом не выделяется.
Во втором описании используется имя нового типа DArray. Каждое из определяемых имен A, B и C будет считаться массивом из ста элементов типа double, и для каждого из них будет выделен соответствующий объем памяти.
Описания указателей на функции из предыдущего раздела можно существенно упростить, используя оператор typedef:
typedef double (*Fun)(double x); /*Тип указателя*/
Fun fnArray[3] = { sin, cos, tan }; /*Массив функций*/
Fun fnFunc(int i) /* Функция, возвращающая функцию */
{
switch(i)
{
case 0 : return sin;
case 1 : return cos;
case 2 : return tan;
}
}
Совершенно очевидно, что последние описания значительно понятнее.
Дата добавления: 2015-02-13; просмотров: 676;