Вы не можете использовать этот статический массив как динамический массив. Эти типы просто несовместимы. Статический массив выложен в одном непрерывном блоке памяти. Динамический массив имеет косвенное отношение к массивам с переменным размером в каждом измерении. По сути дела, это ^^Byte
с дополнительным управлением компилятором и метаданными. Никакое количество кастингов вам не поможет.
У вас есть, по крайней мере, следующие параметры:
- Скопируйте содержимое статического массива в динамический массив. Затем передайте этот динамический массив вашей функции.
- Переключите ваш статический массив в динамический массив, чтобы преобразование не требовалось.
- Упорядочить, что ваша функция принимает статические массивы, а не динамические массивы, чтобы избежать необходимости преобразования.
- Имейте функцию принять указатель на первый элемент и внутреннее измерение. Затем выполните индексирование вручную. Элемент
i,j
имеет линейное смещение i*innerDim + j
.
Ваш тип указателя PMatrix
, вероятно, не требуется. Динамические массивы уже реализованы как указатели. Это, похоже, слишком далеко.
Конечно, просить элемент 3, когда индексы массива идут только до 2, неверны, но это в настоящее время меньше ваших проблем. Помните, что динамические массивы основаны на нулевом значении, и вы указали нулевое значение для своего статического массива.
Я изо всех сил стараюсь рекомендовать, какое решение лучше, поскольку я не понимаю ваши реальные цели и использование на основе упрощенного примера, представленного здесь.
Помогает ли вам индексировать testarray как 1..3,1..3? Я не понимаю, зачем вам это нужно, но, может быть, это поможет некоторым читателям понять? –
См. Также [Передача статических массивов в качестве параметров для динамических массивов в Delphi] (http://stackoverflow.com/q/1593535/576719). –