mehrere Rückgabewerte



  • Moin moin!

    Folgendes Problem:

    Ich hab eine Funktion, in der ich ein Array habe. Dieses soll mit Hilfe einer anderen Funktion innerhalb eines anderen Moduls gefüllt werden.
    Da ich bei jedem Aufruf 3 Werte zurückbekommen will, müsste ich demnach mehrere Werte zurückliefern.
    Dass das mit einem simplen "return" nicht klappt, ist klar.
    Ich ging jetzt allerdings davon aus, dass das mit Hilfe von Pointern kein größeres Problem sein sollte. Ist es aber leider doch, da ich einfach keine Werte zurück bekomme.

    Das ganze sieht so aus (Auszug):

    for(i = 0; i < NUM_TABLE_ROWS_TWO; i++)
    	{
    		DbGetKennlinie(&mgTableContent[i][0], &mgTableContent[i][1], &mgTableContent[i][2], i);
    	}
    
    static void DbGetKennlinie(double *q,	
     					       double *h, 		
     					       double *p,		
    					        UInt16 punkt)
    {
        q = &mgContent[punkt][0];
    	h = &mgContent[punkt][1];
    	p = &mgContent[punkt][2];
    }
    

    So, ich hoffe, mir kann da jetzt jemand helfen. Ich häng da jetzt schon ewig fest und langsam nervt es mich doch n bissl 😃

    P.S.: nicht über die selstamen namen und so wundern... ist n Projekt für Palm OS 😉



  • Wenn du einen Zeiger hast, dann wird in diesem nur eine Adresse gespeichert.

    Bei double *g überschreibst du also mit der Anweisung g = ... nicht den Wert auf den der Zeiger zeigt, sondern den Zeiger selbst, also die Adresse, die im Zeiger steht. Um den Wert zu überschreiben, auf den der Zeiger zeigt, musst du noch einen * vor das g machen. Also *g = ... Alles klar?



  • Also, wenn ich das richtig nachvollziehe, würde das für mich bedeuten, dass ich folgendes zu schreiben habe:

    *q = &mgContent[punkt][0];
    *h = &mgContent[punkt][1];
    *p = &mgContent[punkt][2];

    Seh ich das so weit richtig?
    Falls ja, schade, denn das will auch nicht klappen, da hat der Compiler was gegen und beschimpft mich, ich würde hier "illegal implizit konvertieren".
    Versuch ich es explizit

    (double *)q = &mgContent[punkt][0];

    motzt er zwar nicht rum, aber funzen tut es halt trotzdem nit so wirklich...
    Aber ich kenn mich ja, ich hab da sicher wieder irgendwas verplant.

    Danke aber schon mal für die schnelle Reaktion!



  • Ah, jetzt hat es sich gerade erledigt, meine Werte übergeben sich endlich 😃

    Ich hab jetzt einfach mal noch das & vor mgContent[punkt][0] entfernt, was an sich ja dann auch logisch ist, und siehe da, es funzt!

    Also noch mal vielen Dank für den Tipp! Treffer voll ins Schwarze 🙂



  • Gern geschehen 🙂


Anmelden zum Antworten