Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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?

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

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

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

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.

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

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 Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.