Murdok Geschrieben 8. August 2002 Geschrieben 8. August 2002 Hallo zusammen, Wie muss ich eine Funktion deklarieren, wenn sie entweder int oder ein char-Array zurückliefern soll. Ich komme einfach auf keine Lösung! Allgemein: Kann ich auch einen CString als Returnwert verwenden? Zitieren
kingofbrain Geschrieben 8. August 2002 Geschrieben 8. August 2002 Servus, meines Wissens geht es nicht, dass eine Funktion entweder das eine oder das andere zurückliefert, denn die Funktion kann ja nicht wissen, was sie liefern soll. Einen CString kann sie schon zurückliefern. Eigentlich jeden Datentyp und auch jedes Objekt. k.o.b Zitieren
MasterVoo Geschrieben 8. August 2002 Geschrieben 8. August 2002 Original geschrieben von Chief Hallo zusammen, Wie muss ich eine Funktion deklarieren, wenn sie entweder int oder ein char-Array zurückliefern soll. Ich komme einfach auf keine Lösung! Allgemein: Kann ich auch einen CString als Returnwert verwenden? Das geht nicht ... kannst aber nen Pointer zurückgeben... Zitieren
Klotzkopp Geschrieben 8. August 2002 Geschrieben 8. August 2002 Original geschrieben von MasterVoo Das geht nicht ... kannst aber nen Pointer zurückgeben... Auf was bezieht sich das? int/char* oder CString? Letzteres geht durchaus... Zitieren
nic_power Geschrieben 8. August 2002 Geschrieben 8. August 2002 Abgesehen davon, kann man als Rückgabewert auch eine Union verwenden. union intChar { int i; char *c; }; union intChar *myFunc() { union intChar *tmp; /* tue dies und jenes */ return tmp; } int main() { union intChar *myIntChar; myIntChar=myFunc(); } Nic Zitieren
themaster Geschrieben 11. August 2002 Geschrieben 11. August 2002 Original geschrieben von MasterVoo Das geht nicht ... kannst aber nen Pointer zurückgeben... Man sollte vielleicht noch darauf hinweisen, dass es SEHR kritisch sein kann, einen Pointer zurückzugeben. Zitieren
nic_power Geschrieben 11. August 2002 Geschrieben 11. August 2002 Original geschrieben von themaster Man sollte vielleicht noch darauf hinweisen, dass es SEHR kritisch sein kann, einen Pointer zurückzugeben. Warum sollte das "SEHR kritisch" sein? In C sind Pointer die Standardmethode. Komplexere Rückgabewerte werden grundsätzlich über Pointer zurückgegeben. Nic Zitieren
Crush Geschrieben 11. August 2002 Geschrieben 11. August 2002 Natürlich ist der Hauptgrund unnötige Kopiervorgänge zu unterdrücken, also große Arrays immer als Kopie weiterzureichen wäre vermeidbare Stackbelastung und bremst ja nur aus. Es gibt aber noch tiefere Bedeutungen aus der Sicht der Objektorientierung. Wenn man Referenzen verwendet will man damit ausdrücken, daß die Empfänger sich nicht um die Lebensdauer und das Zerstören der Objekte kümmern müssen. Gibt man Zeiger zurück möchte man in der OO, daß die Lebensdauer und die Destruktion von Objekten (falls sie vom Sender erzeugt wurden) ausgelagert werden und der Empfänger dafür zuständig wird. Allerdings kann man sich ja auch noch mit Mitteln wie const zusätzlich absichern. Eine Union ist grundsätzlich eine gute Idee aber mit Vorsicht zu genießen, allerdings hat sie so den Nachteil, daß man eigentlich nicht weiß ob jetzt ein int oder ein char* tatsächlich zurückgeliefert wurde, weil sich diese Datentypen einfach zu sehr in den Eigenarten unterscheiden. Man müßte also noch eine Kennung setzen und diese mit überreichen, bzw. woher weiß die Funktion, was als Rückgabewert tatsächlich verlangt wird? Es müßte also noch ein Parameter mit übergeben werden, dann könnte man aber auch gleich 2 verschiedene Funktionen aufsetzen. Das ist ja der Grund, wieso man in C++ Parameter überschreiben kann, nicht aber die Rückgabewerte. Es gibt aber natürlich Fälle, in denen man ohne Weiteres so eine Union verwenden kann. Beispielsweise wenn man "ähnliche" Datentypen auch zerstückelt abfragen möchte (bei char,int z.B. oder char*, int*). Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.