2016-04-10 4 views
-2

Wenn ich bereits einen Datenstrukturnamen-Knoten erstellt habe, bedeutet das, dass ich eine Datenstruktur mit einer int Variablen und einem Zeiger zum Speichern der Adresse eines anderen Knotens erstellt habe. Aber warum sind dann erklären wir temp, temp1 und start als Knoten *start, *temp, *temp1 statt Knoten *start, temp, temp1?Verwendung des Erstellens von Knoten als Zeiger auf den Strukturtyp in der Linkliste in C?

Als temp und temp1 werden später im Programm als temporäre „Knoten“ und erklärt sie als Zeiger zu strukturieren Knoten sollte nicht damit es funktioniert, aber dieser Knoten *temp und *temp1 Werke verwendet. Warum?

Kurz gesagt, warum sind diese temp und temp1 deklariert als Zeiger anstelle von Knoten temp, zu strukturieren temp1 und warum arbeiten sie (das heißt Knoten *temp, *temp1)?

+1

Es hängt davon ab, wie sie verwendet werden. Wenn Sie wirklich den Knoten kopieren müssen, dann haben Sie recht, Sie brauchen Knoten statt Zeiger. Aber es ist wahrscheinlicher, dass Sie nur temporäre Zeiger auf Knoten benötigen. In diesem Fall sind die Deklarationen genau das, was sie sein sollten. Aber ohne den Code zu sehen, können wir nur raten. –

+0

Sie haben das * relevante verifizierbare * Code-Teil vermisst, das im * Hilfe-Center * erforderlich ist, und daher ist es sehr schwierig, Ihrer Frage einen Kontext zu geben. – Wtower

Antwort

0

Basierend auf der Annahme/Rate, als kein Code in Ihrer Frage verfügbar.

Ein Beispiel, wenn Ihr wie diese Link-Liste erstellen,

struct node { 
    int value; 
    struct node *link; 
}; 

Wenn Sie struct node temp, temp2 verwenden dann erstellt es zwei Strukturvariable temp und temp2 mit der Speichergröße gleich Speichergröße aller Mitglied in Struktur, die int + struct node *

ist Wenn Sie struct node *temp, *temp2 verwenden erstellt dann zwei Zeiger, die auf struct node Variable verweisen. Weniger Speicher verbraucht, da der Zeiger nur auf den Speicherort zeigen muss.

Also, wenn Sie so wollen, tun

struct node start; 
start.value = 10; 
start.link = 2000; //hypothetically for example, address should be in hex 
struct node temp = start; 
temp.value = 20; // Will change only value to 20 for temp variable only 

dann alle Mitglieds-Werte von start wird innerhalb temp Mitglied kopiert werden. Getrennter Speicher für start und temp Variable.

Und wenn Sie tun, wie,

struct node start; 
start.value = 10; 
start.link = 2000; 
struct node *temp = &start; 
temp->value = 20; //Will change value to 20 for both temp and start. As temp is pointer not a separate variable. 

dann temp ist Zeigervariable auf start Lage.

Verwandte Themen