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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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