Почему мой код не работает, когда я объявляю переменную вне цикла for?

#c #loops #pointers #linked-list #variable-declaration

#c #циклы #указатели #связанный список #объявление переменной

Вопрос:

Я хочу получить пересечение двух связанных списков, но когда я объявляю итераторы вне цикла for, это просто не работает

 // THIS WORKS FINE

for (SList iter1 = list1 ; !slist_empty(iter1); iter1 = iter1->next) {
  for(SList iter2 = list2 ; !slist_empty(iter2); iter2 = iter2->next) {
    if(comp(iter1->data, iter2->data)) {
      result = slist_add(result, iter1->data);
    }
  }
}

// THIS DOESN't
SList iter1 = list1 ;
SList iter2 = list2 ;

for (; !slist_empty(iter1); iter1 = iter1->next) {

  for(; !slist_empty(iter2); iter2 = iter2->next) {
    if(comp(iter1->data, iter2->data)) {
      result = slist_add(result, iter1->data);
    }
  }
}
  

я компилирую с помощью -std=c99

Комментарии:

1. просто не работает не могли бы вы выразиться яснее? вы не можете скомпилировать? сбой выполнения? Каково определение SList? Тег C, на самом деле это C или C ?

Ответ №1:

В первой версии вы проходите через list2 для каждого элемента в list1 .

Во второй версии вы проходите только list2 для первого элемента в list1 . Вам нужно каждый раз «сбрасывать» iter2 в начало list2 .