> -- Цитата:
> т.е. получить указатель на часть массива и использовать ее как новый массив меньшего размера.
Сначала давайте разберёмся, для чего это нужно. Может быть, лучше использовать многомерный массив? Учитывайте, что в С/С++ такие массивы толком не поддерживаются, и часто их эмулируют в одномерном, "играя" индексами. В КП же прекрасная поддержка многомерности.
Если же требуется просто часть линейного массива, почему явно не использовать индексы интервала [beg, end)?
Предположим, группа функций работает с фрагментами массива - ну и передавайте POINTER TO ARRAY... и пару beg, end. Если же работает не просто группа функций, а это это как-то выносится в интерфейс какой-то библиотеки, то хороший тон вообще обернуть это в отдельный тип. Например, сделать тип Array, у которого есть метод GetElems(i, count: INTEGER; OUT elems: ARRAY OF BaseType) и GetSubArray (beg, end: INTEGER): Array.

Эмулировать Си можно, но крайне не рекомендуется. Для этого нужно использовать средства псевдомодуля SYSTEM (см. документацию ББ "Особенности платформы" (Platform-Speciffic Issues)). Тогда указатель на подмассив объявляется как TYPE SubArray = POINTER TO ARRAY [untagged] OF BYTE и затем берётся так: suba = SYSTEM.VAL(SubArray, SYSTEM.ADR(array[i])). Однако это КРАЙНЕ НЕ РЕКОМЕНДУЕТСЯ. При обращении с таким "диким подмассивом", поскольку он безтеговый, не будет выполняться проверка выхода за границы (не то что подмассива, но даже и базового массива), т.е. вся безопасность памяти идёт лесом. Кроме того, подмассив не будет являться якорем для сборщика мусора. Т.е. если ссылка на подмассив есть, а ссылка на базовый уже исчезла, он будет собран сборщиком, и при обращении к подмассиву Вы получите фатальный сбой...