Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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?

Geschrieben

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

Geschrieben
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...

Geschrieben

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

Geschrieben
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.

Geschrieben
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

Geschrieben

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*).

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...