Доброго всем времени!
Изучаю программирование на си по книге А.В. Столярова, очень доходчиво предоставляет материал, первый том зашёл на одном дыхании, правда буксанул с комбинаторикой.
Итак имеется код который удаляет элементы списка имеющие отрицательные значения:
struct item **pcur;
pcur = &first;
while (*pcur) {
if ((*pcur)->data < 0) {
struct item *tmp = *pcur;
*pcur = (*pcur)->next;
free (tmp);
} else {
pcur = &(*pcur)->next;
}
}
Вроде всё банально и просто, но я не могу понять как к примеру если в третьем элементе отрицательное значение, то соответственно срабатывает if и четвертый элемент становится третьим, но во втором элементе поле next ведь ссылается на адрес которого уже нет? Чувствую что то не догоняю до жути простое, но сижу уже какое-то время и прям ступор. Объясните пожалуйста как оно работает?