[C] Usuwanie elementów z listy.

jakub1998
Użytkownik
Użytkownik
Posty: 139
Rejestracja: 24 lis 2015, o 16:53
Płeć: Mężczyzna
Podziękował: 30 razy

[C] Usuwanie elementów z listy.

Post autor: jakub1998 »

Witam, mam kod na usuwanie elementów w liście, które mają taką samą wartość jak podana przez użytkownika. Nie rozumiem jednak co dzieje się w instrukcji else, mógłby mi ktoś to wytłumaczyć lub przedstawić łatwiejszą wersję? (pierwszy raz spotykam się ze wskaźnikami w życiu)

Kod: Zaznacz cały

void removing(List *pt, int i)
{
	while(*pt != NULL)
	{
		if((*pt)->value == i)
		{
			List help1 = *pt;
			*pt = (*pt)->next;
			free(help1);
		}
		else
		{
			pt = &((*pt)->next);
		}
	}
}
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C] Usuwanie elementów z listy.

Post autor: kalwi »

Jeśli obecny element na liście nie ma wartości równej i, to przejdź do następnego elementu listy (czyli to się dzieje w else)
jakub1998
Użytkownik
Użytkownik
Posty: 139
Rejestracja: 24 lis 2015, o 16:53
Płeć: Mężczyzna
Podziękował: 30 razy

[C] Usuwanie elementów z listy.

Post autor: jakub1998 »

Chyba źle się wyraziłem, rozumiem co ma się dziać gdy wartość nie jest równa i, ale jest to dla mnie napisane w taki sposób że nie umiem tego zrozumieć. Czemu w podstawianiu w else wskaźnik pt nie ma gwiazdki, a po prawej stronie występuje wskazanie na (*pt)->next a nie bez wskazania? O to mi chodzi.
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C] Usuwanie elementów z listy.

Post autor: kalwi »

pt - adres
*pt - wartość spod adresu

czyli

Kod: Zaznacz cały

 (*pt)->next
jest to wartość następnego elementu na liście

a

Kod: Zaznacz cały

&((*pt)->next)
jest to adres pod którą znajduje się ta wartość
ODPOWIEDZ