var
a:array[0..29] of TCard;
c:TCard;
begin
for c in a do c.create;
Assigning to an array element in this way is basically the SAME as assigning to a variable, which just happens to be an array element.
I disagree. No array elements are assigned by this construct.
The enumerator merely provides a series of integers (the enumerator's Current property) from Low(a) to High(a) as indices, so that the loop can call Create on each indexed array element in turn (i.e. on 30 nil values, since global arrays are initialized to zero values; or on 30 WriteLn calls in the next line of your code).
In this "for .. in .. do" syntax sugar, c is a placeholder 'variable'. It cannot be written to, nor can it be the recipient of the result of a constructor call. I think it appears in the syntax principally to ensure that the correct enumerator is called (in case there are two or more enumerators defined for the class or array in question).