Это не поддерживается, так как даже простые переменные итератора цикла не могут быть изменены в «нормальном» цикле for. Даже если бы это поддерживалось в for-in , в этом случае это не имело бы особого смысла.
Целые числа являются типами значений, поэтому в каждой итерации цикла все, что должно быть достигнуто, это то, что s будет инициализироваться значением из элемента массива, а затем s будет перезаписано Ct .
Но содержимое массива будет не изменено, и общий эффект кода будет "без изменений".
Чтобы получить то, что вы ожидаете от for-in , вы должны иметь возможность выполнять итерацию с использованием подходящего ссылочного типа (в данном случае PInteger - указатель на целое число), получая ссылается на элементы массива, а не копий значений этих элементов. Новое значение для каждого элемента может быть назначено с помощью разыменованного указателя:
var
ars : array [0..10] of Integer;
s : PInteger;
ct : Integer;
begin
ct := 0;
for s in ars do // << this WON'T yield pointers to the array elements ..
begin
s^ := Ct; // .. but if it did you could then write this
Inc(ct);
end;
end;
Но не волнуйтесь - это тоже не сработает, это просто демонстрирует природу проблемы, проистекающей из разницы в ссылке и значении.