pointer: zu viele "*" Was ist jetzt was?



  • Hi Leute, ich hab mal ne Frage zu na alten Klausur, die ich vom Sinn her verstehe, jedoch mich mit paar Zeilen syntaktisch nicht ganz anfreunden kann.

    Musterlösung:

    //Definieren Sie einen neuen strukturierten Datentyp znumber mit zwei Datenfeldern real und imag vom Typ
    double zur Speicherung von komplexen Zahlen:

    typedef struct complexnumber{
       double real;
       double imag;
    }znumber;  //alles klar bis hierhin.
    

    //Vervollständigen Sie die nachfolgende Funktion zur Summation zweier Komplexen Zahlen vom Typ znumber.

    znumber *sum(znumber *z1, znumber *z2) {//1.frage.
       znumber *newz = malloc(sizeof(znumber));
       newz->real = z1->real + z2->real;
       newz->imag = z1->imag + z2->imag;
       return newz;//2.frage
    }
    

    Zu den Fragen:
    1.wieso steht da ein * vor dem sum, das ist doch unüblich oder nicht??? vor z1 und z2 ist klar, weil es Pointer sind.
    2.hier jetzt bei return, was wird da konkret zurückgegeben? Die Werte oder die Adresse von newz, (ich meine der Wert müsste mit return *newz ausgegeben werden oder nicht.

    Ich hoffe ihr könnt mir weiterhelfen.
    mfg Lucbossman! 🙂



  • Die Funktion gibt einen Zeiger auf einen znumber-"Objekt" zurück. Dazu wird in der Funktion genug Platz für dieses Objekt per malloc() angefordert und die Adresse davon zurückgegeben. Der Aufrufer muß dann daran denken, den Speicher wieder freizugeben:

    znumber* z1,*z2;
    ...
    znumber* s = sum(z1,z2);
    printf("Die Summe ist %f + %f i\n",s->real,s->imag);
    free(s);
    

    PS: Aber imo sind komplexe Zahlen klein genug, um per Wert herumgereicht zu werden 😉



  • 1. Der * sagt, das ein Zeiger zurückgegeben wird.
    2. newz ist schon ein Zeiger.

    In den ersten C Versionen konnte man nur die integralen Typen mit return zurückgeben.



  • 🙂 ok danke dir dirk und dir auch wieder cstoll. haett ich mir gleich denken koenne dass die beiden zeilen direkt zusammenhaengen.^^


Anmelden zum Antworten