struct List
{
char* data; //указатель на данные
List* next; //указатель на следующий элемент
};
void addLast(List** list) //добавление нового элемента в конец списка
{
...
}
Указатели, ** и прочие кошмары памяти...
Код:
Я так понимаю, что в данном случае в функцию передается указатель на односвязный список. Вопрос: каким обрзом работать с элементами списка внутри фукции, как получить доступ к полям отдельных элементов списка. И как будет выглядеть вызов функции, что нужно будет передавать в параметр, указатель? Понимаю как работают обычные указатели с одной *, а это чудо для меня является чем-то загадочным и не объяснимым, хэлп плз.
Цитата: Inc(Dec(i))
Я так понимаю, что в данном случае в функцию передается указатель на односвязный список. Вопрос: каким обрзом работать с элементами списка внутри фукции, как получить доступ к полям отдельных элементов списка. И как будет выглядеть вызов функции, что нужно будет передавать в параметр, указатель? Понимаю как работают обычные указатели с одной *, а это чудо для меня является чем-то загадочным и не объяснимым, хэлп плз.
Передавать надо адрес указателя на односвязный список, который в функции разыменовывается:[FONT=monospace]
[/FONT]
Код:
void addLast(List** list)
{
//подразумевается, что в структуре память под поле данных data выделена
strcpy((*list)->data, strSource);
}
{
//подразумевается, что в структуре память под поле данных data выделена
strcpy((*list)->data, strSource);
}
Цитата:
как получить доступ к полям отдельных элементов списка
Только путём перебора всех элементов списка, начиная с головного... Почитайте книги по алгоритмизации, там всё написано...
Создание экземпляра:
Код:
List* list = new List;
Код:
addLast(&list);
Код:
void addLast(List*& list)
{
strcpy((*list).data, strSource);
}
List* list = new List;
addLast(list);
{
strcpy((*list).data, strSource);
}
List* list = new List;
addLast(list);
По вопросам:
1. каким обрзом работать с элементами списка внутри фукции, как получить доступ к полям отдельных элементов списка:
Надо разыменовать list, чтобы получить объект, на который он указывает.
Код:
void addLast(List** list)
{
(*list)->data;
(*list)->next;
}
{
(*list)->data;
(*list)->next;
}
2. И как будет выглядеть вызов функции, что нужно будет передавать в параметр, указатель?
Передавать надо указатель на указатель, для этого просто получим адрес указателя:
Код:
List *listik; // указатель на односвязный список
addLast(&listik);
addLast(&listik);
А зачем вообще так усложнять? Можно замечательно передать и через простой указатель... Или в учебных целях?
UPD: SergPas, синхронно ответили ... но по-разному :)
спасибо всем кто октликнулся)))
Хотя сам я с таким безобразием не работаю, предпочитая std::vector.