I don't know where you got your information but it is wrong.

There are two types of arrays, one where at compile time is known how many elements are in it (bounded) and one where you do not (unbounded).

In Delphi (Pascal) the second one is also referred to as a dynamic array, dynamic in the sense that the bounds (number of elements) can change at runtime.

In delphi, bounded arrays are declared as "array[a..b] of" where a <= b
and unbounded (dynamic) array as "array of".

The problem that the OP has, is that the declaration for unbounded arrays is different in c and Delphi, thus an unbounded array in c (simply a pointer) does not match an unbounded array in delphi (an actual TYPE).

[pascal]
type
PElement = ^TElement;
TElement = record
...
End;

procedure DoSomething;
var
FirstElement: PElement;
begin
// fetch array
FirstElement := get_list;

// loop
For K := 1 to NumberOfElementsInArray do Begin
...
Inc( FirstElement);
End;
End;
[/pascal]

The obvious thing here is that "get_list" doesn't tell you how many elements are in the list, which can cause/cause a lot of bugs. (That's why they made a "dynamic array" type in Delphi....)