Разрешаются определенные преобразования, с использовани-ем указателей , но они имеют некоторые зависящие от конкрет-ной реализации аспекты. Все эти преобразования задаются спомощью операции явного преобразования типа; см. П. 15.2 и16.7. Указатель может быть преобразован в любой из целочислен-ных типов, достаточно большой для его хранения. Требуется липри этом INT или LONG, зависит от конкретной машины. Преоб-разующая функция также является машинно-зависимой, но онабудет вполне естественной для тех, кто знает структуру адре-сации в машине. Детали для некоторых конкретных машин приво-дятся ниже. Объект целочисленного типа может быть явным образом пре-образован в указатель. такое преобразование всегда переводитпреобразованное из указателя целое в тот же самый указатель,но в других случаях оно будет машинно-зависимым. Указатель на один тип может быть преобразован в указа-тель на другой тип. Если преобразуемый указатель не указыва-ет на объекты, которые подходящим образом выравнены в памя-ти, то результирующий указатель может при использовании вы-зывать ошибки адресации. Гарантируется, что указатель наобъект заданного размера может быть преобразован в указательна объект меньшего размера и снова обратно, не претерпев приэтом изменения. Например, процедура распределения памяти могла бы прини-мать запрос на размер выделяемого объекта в байтах, а возв-ращать указатель на символы; это можно было бы использоватьследующим образом. EXTERN CHAR *ALLOC(); DOUBLE *DP; DP=(DOUBLE*) ALLOC(SIZEOF(DOUBLE)); *DP=22.0/7.0; Функция ALLOC должна обеспечивать (машинно-зависимым спосо-бом), что возвращаемое ею значение будет подходящим для пре-образования в указатель на DOUBLE; в таком случае использо-вание этой функции будет переносимым. Представление указателя на PDP-11 соответствует 16-бито-вому целому и измеряется в байтах. Объекты типа CHAR не име-ют никаких ограничений на выравнивание; все остальные объек-ты должны иметь четные адреса. На HONEYWELL 6000 указатель соответствует 36-битовомуцелому; слову соответствует 18 левых битов и два непосредст-венно примыкающих к ним справа бита, которые выделяют символв слове. Таким образом, указатели на символы измеряются вединицах 2 в степени 16 байтов; все остальное измеряется вединицах 2 в степени 18 машинных слов. Величины типа DOUBLEи содержащие их агрегаты должны выравниваться по четным ад-ресам слов (0 по модулю 2 в степени 19). Эвм IBM 370 иINTERDATA 8/32 сходны между собой. На обеих машинах адресаизмеряются в байтах; элементарные объекты должны быть выров-нены по границе, равной их длине, так что указатели на SHORTдолжны быть кратны двум, на INT и FLOAT - четырем и наDOUBLE - восьми. Агрегаты выравниваются по самой строгойгранице, требуемой каким-либо из их элементов.