wenn ich die folgende Struktur erstellen:Wie funktionieren Zeiger mit doppelt verknüpften Listen in C?
typedef struct node {
int a;
char b[100][15];
struct node *prev;
struct node *next;
} Scope;
Muss ich einen Zeiger mein head_node zu initialisieren? Derzeit ist dies meine Initialisierungsfunktion:
Scope initScope() {
Scope head;
head.a = 1;
head.prev = NULL;
head.next = NULL;
return head;
}
In einiger Funktion würde ich
Scope head = initScope();
sagt Diese so weit ich in Ordnung scheint, aber ich bin nicht sicher, wie ich einen neuen Knoten erstellen. Ich vermute, ich würde einen Zeiger vom Typ Scope benötigen. Ich müsste es von Größe Scope malloc und dann seine Werte initialisieren. Soll ich das gleiche machen, wenn ich den Kopf erstelle? Die zugrundeliegende Frage, die ich zu beantworten versuche, ist der Zweck eines Zeigers hier? Was passiert, wenn in der Definition meiner struct I
*Scope
statt
Scope
geschrieben hatte? Wenn ich Zeiger verwenden muss, um Knoten zu erstellen, warum sollte ich die Struktur nicht zu einem Zeiger machen? Nach meinem Verständnis erlauben Zeiger nur, den Speicher zu manipulieren. Was bleibt also zurück, wenn ich einen Knoten erstelle und weitergehe?
Also würde ich einen Zeiger verwenden, um Knoten zu erstellen? Der erste Knoten würde Nullzeiger haben, und jeder Knoten danach wäre mit dem nächsten Zeiger verbunden? Also benutze ich nur struct, um einen bestimmten Speicherblock zuzuweisen? – Pareod
Zeiger zeigen auf Objekte. Ich bin mir nicht sicher, was Sie mit * meinen, also würde ich einen Zeiger verwenden, um Knoten zu erstellen? * Wenn es nur einen Knoten gibt, ist es "nächste" und "vorherige" Mitglieder werden NULL sein. Sonst werden sie nicht. Ja, Sie verwenden eine 'struct', um einen bestimmten Speicherblock zuzuordnen. –
Was ich meine ist, dass, anstatt "Int = 5" zu sagen, ich sagen werde: int * ptr = malloc (sizeof (int)); & ptr = 5; 'so im Wesentlichen bin ich abschneiden Speicher der Größe int. Wenn ich nun diese Idee auf verknüpfte Listen anwenden möchte, muss ich es auf diese Weise machen, sonst hätte ich einen eindeutigen Variablennamen für jeden Knoten, richtig? Oder ich hätte ein Array von Knoten, die jeweils einen eindeutigen Index haben? Ich glaube, ich beginne zu verstehen, warum ich einen Zeiger für Knoten nach dem Kopf brauche. – Pareod