C Frage zu Pointer in C

Fireball89

Captain
Registriert
Aug. 2007
Beiträge
3.498
Hallo Leute,

habe eine Frage zu Pointern in C.
Angenommen ich habe folgende Funktionen:


Code:
int deq (queue *head, int *data) {
	head = head->next;
}

int test() {
	queue *kopf;
	deq(kopf,data);
}

Am Anfang soll kopf auf Element 1 der Queue zeigen. Am Ende der Funktion deq zeigt head auf Element 2 der Queue. Was ist nun mit "kopf"? Das zeigt doch noch auf Element 1, oder?

Klar, kann man der Pointer auf Element 2 durch den Rückgabewert von deq übergeben. Würde das aber gern vermeiden!
 
Zuletzt bearbeitet:
So wie du das jetzt implementiert hast, steht in deinem 'kopf'-Pointer sowohl vor als auch nach dem deq()-Aufruf nur Müll drin.

Deine deq()-Funktion bekommt eine __Kopie__ deines kopf-Pointers übergeben. Der kopf-Pointer selbst bleibt unverändert. Wenn du kopf selbst verändern möchtest, müßtest du die Adresse deines kopf-Pointers übergeben (und natürlich die deq()-Funktion entsprechend anpassen).

Code:
int deq (queue [COLOR="Red"]**[/COLOR]head, int *data) {
	[COLOR="Red"]*[/COLOR]head = head->next;
}

int test() {
	queue *kopf = 0;
	enq([COLOR="Red"]&[/COLOR]kopf,data);
}
 
Ausserdem, die enq() Funktion ist nicht zu sehen. Oder soll deq() eigentlich enq() sein?

Aber kopf mit 0 initialisieren ist auch nicht grad sehr sinnvoll...
 
Huch, das ist mir nicht mal aufgefallen, aber da hat er natürlich Recht.
 
hab nur das mit enq und deq falsch abgetippt, sry ...
Sind natürlich nur Ausschnitte (reduziert aufs wesentliche).

Aber ich denke antred hat die Frage bereits beantwortet. Ich versuchs mal.
Ergänzung ()

iwie scheint das nicht zu funzen. Der Compiler meckert, dass der member "next" nicht zu einem struct oder union gehört. Aber das tut er! Wenn ich das zusätzliche Sternchen einfüge, dann ist der compiler zufrieden. Stimmt das so?

Code:
int deq (queue **head, int *data) {
	*head = ([COLOR=RED]*[/COLOR]head)->next;
}

int test() {
	queue *kopf = 0;
	deq(&kopf,data);
}
 
Zuletzt bearbeitet:
Oh, ja ... sorry, habe ich also noch was übersehen. Aber so hattest du gleich selber noch einen zusätzlichen Lerneffekt. ;)
 
Zurück
Oben