Ich habe einige Einträge gefunden, um Zeiger als Referenz zu übergeben, habe sie aber nicht wirklich verstanden.C-Zeiger als Referenz übergeben?
Ich habe diese Funktion geschrieben, um einen Knoten in eine verkettete Liste einzufügen. Es scheint innerhalb der Funktion zu arbeiten, aber die Änderungen des linkedList
Zeigers beeinflussen den Zeiger nicht zurück in der Hauptfunktion. Gibt es eine einfache Lösung? Im Klassenraumbeispiel wird der Zeiger linkedList
global deklariert, aber ich dachte, es wäre besser, ihn weiterzugeben, damit ich mehr als eine verknüpfte Liste erstellen kann.
void insert(node* linkedList, int value)
{
node* newNode = malloc(sizeof(node));
if (newNode == NULL)
{
// failed to make node
printf("Failed to insert new node!\n");
return;
}
newNode->n = value;
printf("\n");
printf("Before insert: \n");
printf("\n");
printf("linkedList ptr : %p\n", linkedList);
printf("linkedList->n : %i\n", linkedList->n);
printf("LinkedList->next : %p\n", linkedList->next);
printf("\n");
printf("newNode ptr : %p\n", newNode);
printf("newNode->n : %i\n", newNode->n);
printf("newNode->next : %p\n", newNode->next);
newNode->next = linkedList;
linkedList = newNode;
printf("\n");
printf("After insert: \n");
printf("\n");
printf("linkedList ptr : %p\n", linkedList);
printf("linkedList->n : %i\n", linkedList->n);
printf("LinkedList->next : %p\n", linkedList->next);
printf("\n");
printf("newNode ptr : %p\n", newNode);
printf("newNode->n : %i\n", newNode->n);
printf("newNode->next : %p\n", newNode->next);
}
Sicher gibt es eine einfache Lösung - loswerden 'void einfügen' und den Kopf zurück. –
Oder verwenden Sie einen Doppelzeiger und aktualisieren Sie den Wert mithilfe der Referenz. – Haris
Ich wollte das auch vorschlagen. Habe gerade die neue verknüpfte Liste zurückgegeben.Verwenden Sie so: 'list = einfügen (Liste, Nummer)' – nielsbot