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