#c
#c
Вопрос:
void insertnode(node *s, int a)
{
node *newnode = (struct node*)malloc(sizeof(struct node));
newnode->data = a;
newnode->next = NULL;
if(s==NULL)
{
s = newnode;
}
else
{
node *p = s;
while(p->next!=NULL)
{
p=p->next;
}
p->next = newnode;
}
}
int main()
{
node *s;
insertnode(s,5); //inserting element at the end
insertnode(s,10); //inserting element at the end
return 0;
}
Не в состоянии понять, почему s по-прежнему равен нулю при каждой
вставка. Печать после вставки не приводит к выводу.
Простите, что задаю сомнения новичкам
Комментарии:
1. Неопределенное поведение.
s
не инициализируется перед использованием, помимо всех других проблем, здесь.
Ответ №1:
s
равен нулю после каждой вставки, потому что ваш код s = newnode
устанавливает локальному s
указателю новое значение, которое не обновляет содержимое исходного указателя в main()
. Вы могли бы либо insertnode()
вернуть s
указатель (например, s = insertnode(s,5)
не рекомендуется), либо main()
создать контрольный узел в качестве заполнителя начала списка, который вы затем передаете insertnode()
при первом обращении к нему (рекомендуется).