Выражения могут быть преобразованы из одного типа в другой явным указанием. Выражение E может быть явно преобразовано к типу имя-типа с помощью записи вида
(имя - типа) Егде имя типа представляется в форме
указатель-типа абстрактный-описательАбстрактный описатель аналогичен описателю, за исключением того, что он не содержит определяемого или описываемого идентификатора. Смысл слов имя-типа, представляемого в форме
Т абстрактный описательгде Т является указателем типа, может быть определен одним из таких способов:
- форма абстрактного описателя - смысл слов " Т абстрактный описатель ";
- пустой (абстрактный описатель) - абстрактный описатель типа Т;
- * (абстрактный описатель) - указатель на тип Т;
- абстрактный описатель () - функция, возвращающая значение типа Т;
- абстрактный описатель [ n ] - массив с n элементами типа Т, n - выражение с постоянным значением;
Приведем примеры явного преобразования. Предположим, что даны следующие определения и описания:
int i;char *pc, *name; char *calloc(), *strcpy();тогда можно привести следующие примеры явных преобразований типов:
|
|
(char) i - преобразует значение типа int в значение типа char.
pc=(char *) 0777 - преобразует восьмеричный литер 0777 в значение указателя на знак таким образом, что оно может быть присвоено переменной "pc".
(emp *) calloc(1,sizeof(emp)) - преобразует значение "знакового" указателя, возвращаемого функцией calloc, в значение указателя emp.
(void) strcpy(name,"gehani") - опускает значение, возвращенное функцией strcpy.
Синтаксис типов
Можно отметить, что синтаксис типов в языке Си нерегулярен и беспорядочен, о чем свидетельствуют:
- Трудность создания форматеров.
- Большое число ошибок, допускаемых даже опытными программистами.
- Трудность создания синтаксических анализаторов для трансляторов с языка Си - не существует двух трансляторов с языка Си, синтаксис входного языка для которых полностью совпадал бы.
- Имеется три случая, когда необходимо использовать типы:
- описания, связывающие тип с именем, как например, в случае описания (глобальных) переменных и формальных параметров;
- описания, связывающие значения (и тип) с именем, как, например, описания программ;
- приведения, обеспечивающие, например, возможность трактовки символов как целых.
Лекция 6. Функции и переключение ввода-вывода
Ввод и вывод одного символа. Буферы. Чтение одной строки. Чтение файла. Переключение и работа с файлами.