Функциональные возможности, представленные указателями, присутствовали в компьютерных машинных языках с самого начала, поэтому языки всегда давали какой-то доступ к функциональности, даже если не всегда так широко, как с указателями.Я помню, как консультировался о порте некоторого кода K & R C в Fortran 66. Код C был полон указателей на структуры, которые не очень хорошо отображались в какой-либо функции Fortran 66.
Скажите, что код C имеет структурывот так:
struct datastruct {int ival;float fval;} data [100];
Отображение на Фортране имело общий блок (не уверен, что у меня правильное форматирование, мой Фортран 66 чрезвычайно устарел):
COMMON / DATASTRUCT / IVAL (100), FVAL (100)
Функция в C, которая берет указатель на структуру, не должна знать, была ли структура получена из массива или была malloc'ed, или что-то еще:
floatfunc (struct datastruct * sp) {return sp-> ival * sp-> fval;}
При отображении в Fortran 66 все «структуры» были просто индексами массивов, содержащихся в общем блоке:
FUNCTION FUNC(INDEX)
COMMON /DATASTRUCT/ IVAL(100), FVAL(100)
RETURN IVAL(INDEX) * FVAL(INDEX)
Не так элегантно, как указатели, но выполнили работуна CDC 7600 назад в день.