Ставить ли ^ после указателя - вопрос спорный, потому что находится между разными уровнями абстракции. Если у меня есть массив или объект и я работаю именно с ним, то меня мало интересует, как эти данные размещены. Находятся ли они в куче или в основной памяти, доступны ли по указателю или просто по имени - это детали реализации (механизма), которыми на данном уровне абстракции я не занимаюсь. И в этом случае лишние ^ меня отвлекают, потому что мешают видеть, например, манипуляции с элементами массива, которые одинаковы и для массива по указателю и для массива по обычной переменной.
Но если я опускаюсь на уровень ниже, то здесь важен сам механизм, сами детали хранения массива. Например, беспокойство о том, что вместо массива будет NIL, как раз с этого уровня (так же как и стоимость разыменования). Вот тогда, символ ^, подчеркивающий указатель, будет полезен, потому что, внимание концентрируется не на элементах структуры, а на механизме хранения всей структуры целиком (пустой указатель - неполучение ВСЕЙ структуры).
Так что, может тут и нет "абсолютно лучше", а получается как в притче:
"оба правы, и ты тоже прав". И одновременно "оба неправы". Ясность, показывающая механизм, является туманом для следующего уровня абстракции и наоборот - при опускании ^ легко забыть, что это указатель.
Ранее я приводил
аналогичные рассуждения о строке, задаваемой в константном массиве. Там вроде бы удалось придумать синтаксис, явно указывающий уровень абстракции. Правда пока это не реализовано, так что неизвестно насколько это будет удачно практически. Возможно, синтаксис, которым надо явно указывать уровень абстракции, будет еще более надоедливым, чем синтаксис, одинаковый для всех уровней (и потому на некоторых излишний)
Кстати, в языке Ада разыменование указателя
p обозначается "
p.all". Т.е. для указателя на запись "
p.val" - одно из полей, а "
p.all" - вся запись целиком. Хотя можно написать "
p.all.val". Для доступа к элементу массива через указатель
q тоже можно обратиться двояко: "
q.all(10)" или "
q(10)".