LINUX.ORG.RU

Kernigan&Ritchi?


0

0

Отзовитесь плиз кто по этой доке изучал си
В частности интересует нижеследующая ф-ция
а именоо..Каким образом увеличиваеться p.
(Вырвано из контекста главы "Структуры ссылающиеся на себя")

treeprint (p) /* print tree  p  recursively */
  struct tnode *p;
  {
     if (p != NULL)    {
        treeprint (p->left);
        printf("%4D %s\n", p->count, p->word);
        treeprint (p->right);
     }
  }

anonymous

Ответ на: комментарий от der_steppen_wolf

> Читай правила организации списков

IMHO сначала нужно посоветовать прочитать, что такое указатели :-).

----------------------- Корольков Дмитрий http://dkorolkov.by.ru

DKorolkov
()

Надеюсь, это не стеб.

Список p содержит поля, ссылающиеся на другие элементы этого списка, ок?

Рассмотрим поле right - оно ссылается на след. элемент списка. Функция treeprint (p) печатает содержимое элемента p и вызывает сама себя РЕКУРСИВНО для следующего элемента p->right. Далее опять - вновь вызванная treeprint (treeprint(p->right) ) печатает содержимое элемента p->right и вызывает себя рекурсивно для след. элемента p->right->right. И т.д., пока очередной элемент не окажется последним (p->right == NULL), или пока не кончится стек (при каждом рекурсивном вызове создается стековая переменная p и еще кое-что спасается - все в стек!)

Обычный прием, вместо цикла используется рекурсия.

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

Всем кто отвелил tnx.Кстати там же нашёл баг(а может так и задумано).
... 
p == talloc();
...

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.