Usuwanie elementów z listy (struktury) - funkcja

0

Witam,

Mam pytanie odnośnie funkcji usuwającej pozycję z określoną liczby z listy. Wygląda ona u mnie tak:

int remove(struct element **p, int data) {
	
	if ((*p)->number == data) {
		struct element *ntr = (*p)->next;
		free(*p);
		*p = ntr;
		return 1;
	}
	
	while(*p) {

		if ((*p)->next->number == data) {

			struct element *ntr = (*p)->next->next;
			free((*p)->next);
			(*p)->next = ntr;

			return 1;

		}

		*p = (*p)->next;

	}

	return 0;

}

I działa. Ale moje pytanie brzmi: dlaczego działa również, gdy przekazuję jako parametr nie wskaźnik do wskaźnika do struktury tylko sam wskaźnik do struktury (innymi słowy, jedna gwiazdka zamiast dwóch w parametrze)? Czy program przypadkiem nie powinien wtedy nie działać? :)

0

kod c++ bo w tym wypadku nie ma to znaczenia.

void foo1(int *x)
{
    x = 0;
}

void foo2(int **x)
{
    *x = 0;
}

int main()
{
    int *x = new int(2);

    cout << "przed: " << x << "\n\n";

    foo1(x);
    cout << "po foo1: " << x << "\n\n";

    foo2(&x);
    cout << "po foo2: " << x << "\n\n";

    return 0;
}

jest to kod poglądowy i cieknie z niego z każdej strony ale zobrazuje ci o co chodzi.

W przypadku foo1 adres na który wskazuje wskaźnik nie ulegnie zmianie, w przypadku foo2 zmieni się.

Przekaż w twoim kodzie "z jedną gwiazdką", usuń pierwszy element i zastąp go następnym i zobacz czy będzie działać tak samo jak gdybyś przekazał "z dwiema gwiazdkami".

1 użytkowników online, w tym zalogowanych: 0, gości: 1