>>15114 это в массе Кресты, ты постоянно будешь натыкаться на примеры с ними на том же CodeProject, например
>>15117 рекурсия — вызов подпрограммы самой себя, например очистка связного списка:
допустим, что:
type Element_Object;
type Element_Access is access Element_Object;
type Element_Object is
record
Value : Element_Value; -- тип, который хранит элемент списка
Next : Element_Access := null;
end record;
процедуру опустошения списка можно сделать рекурсивной:
procedure Free_List (List_Head: in out Element_Access) is
begin
if List_Head.Next /= null then
Free_List (List_Head.Next); -- рекурсивный вызов
end if;
Free (List_Head);
end Free_List;
но рекурсивные вызовы грузят стэк, что может быть критично на больших списках, и создают дополнительные расходы на вызов подпрограммы. тоже самое можно сделать циклом:
procedure Free_List (List_Head: in out Element_Access) is
Condemned : Element_Access;
begin
while List_Head /= null loop
Condemned := List_Head;
List_Head := List_Head.Next;
Free (Condemned);
end loop;
end Free_List;
вообще любую рекурсию можно преобразовать в цикл, но это не всегда получается так просто, как в примере выше
указатель в С — это число, которое битовый массив, которое является адресом некоторой ячейки памяти. простых примеров арифметики с ними у меня нет. вообще, указатель и арифметика с ним — источник трудно определяемых багов