почему и когда требуется двойной указатель?
Я был сисадмином большую часть своей жизни, но недавно решил потренироваться в моих знаниях по dev и попробовать себя в позе devops. Я практиковал некоторые навыки C и Python и написал код для вставки числа в связанный список.
void list_insert(struct list *h, int d)
{
struct list *elem = malloc(sizeof(struct list));
elem->data = d;
elem->next = NULL;
if (!h) {
h = elem;
} else {
elem->next = h;
h = elem;
}
}
Я заметил, что эта функция, по-видимому, не изменяет внешний вид переменной h (т.е. все, что передается в list_insert), и я заметил, что печать в конце функции вставки, кажется, работает. Поэтому, попытавшись найти ответы в Интернете, я ничего не смог найти, obvio, нас, но я обнаружил, что большинство реализаций списков имеют двойные указатели. Я изменил свою функцию, чтобы использовать двойные указатели, и затем она внезапно начала работать. Может ли кто-нибудь помочь мне понять, что здесь происходит, поскольку я знаю, что управление указателями является важной концепцией, и я думаю, что понимаю, что такое указатель и как он связан с памятью, но я не думаю, что понимаю, почему один указатель не изменяется, тогда как двойной указатель делает.
Спасибо!