Короткий ответ: чтобы получить подмассив, вам нужно было бы создать новый массив и скопировать элементы ... Или, если бы вы использовали c ++, вы бы запоминали.
Теперь, почему бы просто не использовать подход смещения / подсчета?
При вызове calc_sub(blargh[] array)
вместо этого используйте calc_sub(blargh[] array, int offset, int count)
?
Это в основном способ передачи c # указателя на элемент start / half-pos и указание функции работать только с половиной элементов массива.
Я должен отметить, что если вы не работаете с огромными двойными массивами, вам не стоит об этом беспокоиться. 64 бита = 8 байт. Даже если у вас есть массив из 1000 элементов, это 8000 байт, ~ 8 КБ памяти, которые вы в значительной степени освободите менее чем за секунду ...
Теперь, это всегда хорошая идея, чтобы сохранить память там, где это возможно, но я бы посчитал это преждевременной оптимизацией.
Следует также отметить, что массивы передаются по ссылке, поскольку они действительно являются объектами, а не целыми числами или строками, поэтому этот метод лучше всего подходит для памяти [он не копирует массив; он дает что-то вроде указателя на объект массива], но он ограничен в том, что изменение массива в вашей функции изменит массив, переданный за пределы вызова вашей функции.