почему и когда требуется двойной указатель?

Я был сисадмином большую часть своей жизни, но недавно решил потренироваться в моих знаниях по 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, нас, но я обнаружил, что большинство реализаций списков имеют двойные указатели. Я изменил свою функцию, чтобы использовать двойные указатели, и затем она внезапно начала работать. Может ли кто-нибудь помочь мне понять, что здесь происходит, поскольку я знаю, что управление указателями является важной концепцией, и я думаю, что понимаю, что такое указатель и как он связан с памятью, но я не думаю, что понимаю, почему один указатель не изменяется, тогда как двойной указатель делает.

Спасибо!

Ответы на вопрос(3)

Ваш ответ на вопрос