> -- Цитата:
> С чем связано то, что указатели по значению не передаются?


С тем, что по ссылке можно передать как статическую переменную, так и указатель - он будет разыменован (формально говоря, на самом деле, конечно, парам-р по ссылке - это и есть указатель, и с точки зрения машинного кода операция лишняя возникает как раз в первом случае - взятие адреса).

Так вот, а в ту процедуру, которая требует указателя, статическую переменную вы не передадите никак - в КП отсутствует операция взятия адреса, т.к. она порождает небезопасные (неуправляемые) указатели. Есть, конечно, SYSTEM.ADR - но это низкоуровневая вещь, которой нужно пользоваться как можно меньше.

Кстати, я как-то собрался написать функцию, которая безопасно берет адрес от переменной, переданной по ссылке, проверяя перед этим, что переменная находится именно в куче, а не в стеке и не в глобальной секции модуля. Проверить все эти условия удалось, но не удалось одного: проверить, что переменная распределена в куче самостоятельно, а не как поле другой динамической переменной. А без такой проверки вся безопасность летит куда подальше - если сборщик мусора уберет часть другой записи... бр... От затеи пришлось отказаться, да и не особенно она нужна была...