Funktionsrückgabewert=Array



  • Hallo,
    ich hab ein kleineres Problem. Und zwar möchte ich ein Array aus einer aufgerufenen Funktion an die Aufrufende zurückgeben.
    Wie kann ich das bewerkstelligen ? Habe es mit Pointern probiert, dieser liefert mir allerdings nur den ersten Wert des Arrays.

    Danke schonmal im Voraus



  • Der Pointer zeigt auf die Adresse des ersten Elements. Du kannst die Adresse aber hochzählen und den Pointer auf das zweite Element umbiegen.



  • Hallo,

    das ist kein Thema. Das dumme ist nur, dass er mir zwar die erste Speicherstelle korrekt ausliest, jedoch bei den nachfolgenden nur noch Müll erscheint (beide Pointer haben den Datentyp char und sollten folglich auf die selbe Speicherstelle zeigen).

    hab das etwa so programmiert:

    .
    .
    main()
    {
    char *func1(void);
    char *Ein;
    .
    .
    Ein=func1();
    }

    char *func1(void)
    {
    char Lesen[];

    bla bla
    .
    .
    .
    return Lesen;
    }



  • eine lokale Variable wird zerstört, wenn der Block, in dem sie definiert wurde, zerstört wird. Der Pointer, den deine Funktion zurückgibt, zeigt also auf nicht mehr gültigen Speicher. Da kann alles mögliche drinstehen ... dass das erste Zeichen anscheinend noch richtig war, ist Zufall.

    Normalerweise macht man das so:

    void func(char *array) {
      /* was mit array machen */
    }
    

    man kann auch das gleiche Array wieder zurückgeben und die Funktion char* deklarieren. Jedenfalls ist so der Aufrufer für die Bereitstellung des Speichers zuständig.



  • Ah,jetzt ja.

    War mir erst nicht schlüssig was genau damit gemeint war.
    Hab nochmal in meine Bücher geschaut. Dann hat es endlich geklingelt.
    "Call by reference" nennt sich das ganze.

    Danke nochmal für den Impuls



  • cbr? ne. das is ganz normal cbv.



  • Original erstellt von Mr. n:
    cbr? ne. das is ganz normal cbv.

    Wenn mans wörtlich nimmt, ja: C kennt _NUR_ cbv. Aber die beschriebene Art und Weise wird benutzt, um cbr in C zu simulieren.



  • also, für mich ist das einfach ein passen des pointers. kein cbr. simulieren? hmmm...


Anmelden zum Antworten