Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Call by reference bei Structs

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.05.2007, 19:12 Uhr
jack26



Hi Leute,

ich bearbeite gerade ne alte C Klausur und bin beim Verkettete Listen Teil angekommen. Ich habe die erste Aufgabe gelöst, häng aber irgendwie bei der 2ten, wäre nett wenn mir jemand meine Fragen beantworten könnte.

Die Codevorgabe lautete folgendermaßen:



C++:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>



struct person {
    char *name;
    struct person *next;
};
int main(void) {
    struct person p3 = {"Schulze", NULL};
    struct person p2 = {"Meier", &p3};
    struct person p1 = {"Kohl",&p2};
    struct person *liste = &p1;
    drucke(liste);                   // Kohl Meier Schulze
    drucke(invertiere(liste));    // Schulze Meier Kohl
    }



1. Für die erste Aufgabe sollte ich die Namen, wie im ersten Kommentar, in korrekter Reihenfolge ausgeben, mit Hilfe einer Prozedur "drucke", gesagt getan:


C++:
void drucke(struct person *obj) {

    printf("%s ",obj->name);
    printf("%s ",obj->next->name);
    printf("%s \n",obj->next->next->name);
}


Warum muss ich denn hier eigentlich den Pfeiloperator(-> für die Ausgabe verwenden?? Warum geht dies nicht auch mit obj.name etc.??
Ich weiß das liegt an call by reference, ich versteh nur noch nicht ganz den Zusammenhang.


2. Für die zweite Aufgabe muss ich eine Funktion "invertiere" schreiben, die aus einer übergebenen Liste eine neue erzeugt, nur mit umgekehrter Namens-Reihenfolge, wie im zweiten Kommentar beschrieben. Die Liste darf nicht verändert werden.
Jemand ne Idee??




Ich hoffe ihr könnt mir weiterhelfen, ich weiß, dass sieht etwas viel aus, aber is gar nich soviel, glaub ich jedenfalls.

Vielen Dank.
Gruß
jack26
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.05.2007, 19:35 Uhr
Pablo
Supertux
(Operator)


zu 1: wenn du auf Elemente eines Structs über einen Zeiger (obj ist ein zeiger) zugreifen willst, dann musst du -> benutzen.

zu 2: was meinst du mit "Die Liste darf nicht verändert werden."? Meinst du den Inhalt oder der Struktur der Liste? Sonst würde ich eine doppel verkette Liste daraus machen.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.05.2007, 19:48 Uhr
jack26



Hieß in der Prüfung nur:
"Beachten Sie, dass die übergebene Liste nicht verändert werden darf!".

Genau bei der doppelt verketteten Liste setzts bei mir leider immer aus...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.05.2007, 21:25 Uhr
0xdeadbeef
Gott
(Operator)


Das heißt im Zweifel, eine Kopie auf dem Heap anzulegen. Dann ist das Prüfungsprogramm allerdings fehlerhaft - ich seh nirgends eine Speicherfreigabe.

Nachtrag: Was die doppelt verkettete Liste angeht, da hab ich hier mal eine doppelt verkettete Dummy-Liste geschrieben. Die heißt da queue, weil nur die queue-Operationen implementiert sind, aber das Konzept ist eine doppelt verkettete Liste.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 17.05.2007 um 21:27 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.05.2007, 21:43 Uhr
Pablo
Supertux
(Operator)



Zitat von 0xdeadbeef:
ich seh nirgends eine Speicherfreigabe.


braucht er auch nicht, er hat malloc nie benutzt
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.05.2007, 21:51 Uhr
0xdeadbeef
Gott
(Operator)


Ja, aber wenn invertiere die Eingabeliste nicht verändern soll, wird er das wohl müssen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.05.2007, 09:31 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von 0xdeadbeef:
Ja, aber wenn invertiere die Eingabeliste nicht verändern soll, wird er das wohl müssen.

was dann insgesamt gräuliches design wäre
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: