Zeiger auf Array aus Funktion zurückgeben



  • Kurt01 schrieb:

    Hallo,

    weis jemand wie ich ein Zeiger auf ein Array aus einer Funktion zurückgeben kann ?

    MfG

    Ja.



  • und wie geht das was muss ich da schreiben ?



  • Einen Zeiger auf ein Array aus einer Funktion zurueckzugeben macht nur Sinn wenn es dynamisch angelegt worden ist, und wenn du das hinbekommen hast, dann hast du ja einen Zeiger auf dein Array, der vom Typ Zeiger auf Array ist, den brauchst du ja dann nur als Rueckgabetyp anzugeben und in der Funktion zurueckzugeben.

    Ich hoffe du willst kein Zeiger auf ein statisch in einer Funktion angelegtes Array zurueckgeben, denn das existiert nach verlassen der Funktion nicht mehr.

    Gruss
    Entyl Sa



  • int (*foo())[10];

    Aber ich bin nicht ganz sicher, ob du das meintest. Willst du vielleicht einfach nur einen Zeiger auf das erste Element eines Arrays zurückgeben? int *foo()



  • Kurt01 schrieb:

    und wie geht das was muss ich da schreiben ?

    return zeiger_auf_array_in_einer_funktion; /* Wenn Array nur lokal angelegt geht das schief */
    


  • Entyl_Sa schrieb:

    Ich hoffe du willst kein Zeiger auf ein statisch in einer Funktion angelegtes Array zurueckgeben, denn das existiert nach verlassen der Funktion nicht mehr.

    Doch, das ist ja gerade der Sinn von statischen (static) Arrays.



  • Bashar schrieb:

    Entyl_Sa schrieb:

    Ich hoffe du willst kein Zeiger auf ein statisch in einer Funktion angelegtes Array zurueckgeben, denn das existiert nach verlassen der Funktion nicht mehr.

    Doch, das ist ja gerade der Sinn von statischen (static) Arrays.

    Allerdings sollte man das auch nur in Ausnahmefällen machen. Man weiß ja nie, wer die Funktion alles aufruft!



  • Das Arra ist dynamisch erzeugt

    UINT* m_arr = new unsigned int[2];
    ...
    return arr;

    Wie muss den da der Rückgabetyp aussehen ?



  • Ihr habt natuerlich recht, bei Arrays die mit static angelegt wurden funzt das, hab mich da etwas falsch ausgedrueckt, ich meinte das es mit ganz normal angelegten Arrays, also keinen dynamischen nicht funzt

    Entyl Sa



  • tobidope: Das ist wahr. Ich wollte nur dagegenwirken, dass die Speicherklassen durcheinander geworfen werden. Statische Variablen bleiben beim return bestehen, automatische Variablen hören auf zu existieren.

    Kurt: Falls du dich nur verschrieben hast und eigentlich m_arr zurückgeben willst, dann so:

    UINT * funktion() {
      ...
      return m_arr;
    }
    

    BTW gibt es in C kein new. Das C++ Forum ist nebenan. Ich versteh nicht, wieso hier immer wieder soviele C++-Fragen auftauchen, das ist ja bald mehr als 50% ... Gebts zu, ihr wollt mich nur ärgern, weil ich letztes Jahr vorgeschlagen habe, dass ANSI-C-Forum wegen Nicht- bzw. Falschbenutzung aufzulösen.



  • UINT * f(){
    UINT* m_arr = new unsigned int[2];
    ...
    return m_arr; 
    }
    


  • @Kurt
    Mal davon abgesehen, dass es new in ANSI-C nicht gibt, wird das nicht so hinhauen, wie du dir das vorstellst.

    Wenn du ein Array dynamisch ändern willst in einer Funktion (oder Methode), dann übergieb doch einfach einen Zeiger auf den Array an die Funktion, ändere dynamisch die Speicherbelegung und gib den Zeiger wieder zurück (Prinzip von realloc).

    Beispiel:

    struct pos
    {
       int x;
       int y;
    };
    ...
    struct pos *addpos(struct pos *positionen, int anzpos)
    {
       if(positionen)
       {
          positionen=realloc(positionen, (anzpos+1)*sizeof(struct pos));
       }
       else
       {
          positionen=malloc((anzpos+1)*sizeof(struct pos));
       }
    
       return(positionen);
    }
    

Anmelden zum Antworten