Q:

Работа с внешним массивом внутри функции переданным как параметр Delphi 10.2

Насколько знаю при передачи массива в процедуру/функцию, передаётся её адрес, но не сам массив.
type
  TBigData = array of UInt64;

procedure Add_pr(Var arr_to: TBigData; Const arr_from: TBigData); --суммирует два массива, результат пишет в первый
begin
   arr_to[i] := arr_to[i] + arr_from[i];//Код пропущен, просто суммирование двух массивов в первый
end;

function Add_fu(Const arr_to, arr_from: TBigData): TBigData; --суммирует два массива, результат пишет в третий (fun.Result)
begin
   Result[i] := arr_to[i] + arr_from[i];//Код пропущен, просто суммирование двух массивов в третий
end;

Иногда нужно суммировать в один из двух массивов, которые слагаемые, иногда нужно вообще новый создать(третий) и туда занести сумму.
Важна скорость работы алгоритма, вопрос по коду, хочется не следить за двумя версиями процедуры-функции(есть такие же "пары" по делению, умножению, отниманию и т.д. всё для того же, работы внутри двух массивов, или результат внести в третий).
Как объединить код проц/функ не потеряв скорости алгоритма?
Что-то вроде
function Add_fu(Var arr_to: TBigData; Const arr_from: TBigData): TBigData;
begin
   Result[i] := arr_to[i] + arr_from[i];
end;

При вызове если нужно работать создать третий массив:
arr3 := Add_fu(arr1,arr2);

Если нужно занести сумму в первый массив слагаемое, третий массив-результат не нужен:
arr1 := Add_fu(arr1,arr2);

Можно ли обойтись малой кровью не потеряв скорости работы алгоритма, с минимум изменений.
Не будет ли при таком вызове (arr1 := Add_fu(arr1,arr2)) проблем и создания копий и прочих тормозов и ошибок?
Вроде бы внутри функции Result, arr_to это просто ссылка на адрес, и в зависимости от вызова функции они могут быть одним тем же или разным массивами, но кто знает, как это реализовано в Delphi 10.2?

A:

Можно так cделать и использовать по-разному
procedure Add(A, B, C: TBigData);
begin
  ... C[i] := A[i] + B[i];
end; 

Add(X, Y, Z);   //сумму в третий
Add(X, Y, X);   //сумму в первый
Add(X, X, X);   //первый удвоить

