Язык программирования C

Скачать в pdf «Язык программирования C»


Рассмотрим объявление вида Т D, где D имеет следующую форму:


* список-модификаторов-типанео0 D1


Пусть тип идентификатора в объявлении Т D1 — “расширитель-типа Т”. Тогда типом идентификатора D будет “расширитель-типа список-модификаторов-типа указатель на Т”. Модификаторы типа, стоящие после символа *, относятся к самому указателю, а не к объекту, на который он указывает.


Для примера рассмотрим объявление int *ар [] ;


где ар [] играет роль D1; объявление “int ар [] ” дает переменной ар (см. ниже) тип “массив элементов типа int”, список модификаторов типа здесь пуст, а расширитель типа — “массив элементов типа Следовательно, на самом деле объявление ар означает “массив указателей на int”.


Вот еще примеры объявлений: int i, *pi, *const cpi = &i; const int ci = 3, *pci;


В них объявляется целая переменная i и указатель на целую переменную pi. Значение указателя cpi нельзя изменить впоследствии; cpi всегда будет указывать на одно и то же место, даже если значение, на которое он указывает, изменится. Целая величина ci — константа, ее изменить нельзя (хотя можно инициализировать, как в данном случае). Тип указателя pci — “указатель на const int”; сам указатель можно изменить, чтобы он указывал на другое место в памяти, но значение, на которое он будет указывать, через обращение к pci изменить нельзя.


А.8.6.2. Описатели массивов


Рассмотрим объявление Т D, где D имеет вид


D1 [константное-выражениенеоб]


Пусть тип идентификатора объявления Т D1— “расширитель-типа Т”, тогда типом идентификатора D будет “расширитель — типа массив элементов типа Т”. Если константное выражение присутствует, оно должно быть целочисленным и больше 0. Если константное выражение, задающее количество элементов в массиве, отсутствует, то массив имеет неполный тип.

Скачать в pdf «Язык программирования C»