Язык Си позволяет дать новое название уже существующим типам данных. Для этого используется ключевое слово typedef и при этом новый тип не создается.
typedef < имя ранее определенного типа >< имя нового типа1>
[,<имя нового типа2>…];
Новое имя становится синонимом имен ранее определенным. Пример:
typedef float real; //Теперь вместо float можно использовать real.
typedef char symbol; // вместо зарезервированного типа char можно
// использовать symbol
Часто используется для переопределения структур.
typedef struct st
{
char name [30];
char group [4];
int god;
} STUDENT;
Для определения переменной далее можно использовать запись
st AN; или STUDENT AN;
Область действия зависит от расположения оператора typedef. Если определение находится внутри функции, то область действия локальна и ограничена этой функцией. Если вне, то – глобальна. С typedef может быть объявлен любой тип, включая указатели, функции и массивы, структуры и объединения.
Пример.
typedef char arr [40]; // FIO- массив символов
arr FIO, *adres; // adres - указатель на массив символов
Это эквивалентно char FIO[40], *adres;
Пример.
typedef int* Pi; //объявлен новый тип Pi-указатель на целое.
typedef void (*pfn) ( ); //объявлен новый тип pfn-указатель на функцию,
// не возвращающую значения, с любым списком типов аргументов.
typedef void (*pfnI) (int); // объявление типа pfnI-указатель на функцию с
//одним аргументом типа int, не возвращающую значения
typedef void (*pptn[10]) (); //объявление типа pptn- массив из 10 указателей
// на функцию, не возвращающую значения, с любым списком аргументов.