Ein Array zurückgeben

Gast #2557490
Guten morgen,
ich habe zwei Array addieren und will das Ergebnis all Array zurückgeben 
aber klappt nicht ich bekomme nur das erste Element.

#include <avr/io.h>
#define MAX  6

char cMyFstArray[MAX]={1,7,9,4,6,11};
char cMySndArray[MAX]={9,6,3,4,6,10};
char cMyResultat[MAX];
uint8_t u8LenFstArray;
char *OperatioArray(char *pFstArray, char *pSndArray, uint8_t 
u8lenArray1 );
int main(void)
{
    u8LenFstArray=sizeof(cMyFstArray);
    char *add;
    add=OperatioArray(cMyFstArray,cMySndArray,u8LenFstArray);

}
char *OperatioArray(char *pFstArray, char *pSndArray, uint8_t 
u8lenArray1 )
{
   for (int i=0;i<u8lenArray1; i++)
      {
         cMyResultat=pFstArray[i]+pSndArray[i];
      }
      return cMyResultat;
}
Gast #2557495
1
cMyResultat[i]=pFstArray[i]+pSndArray[i];

In "add" steht nur der pointer auf das Array "cMyResultat". Und der 
zeigt nun mal auf das erste Element.

Blackbird
Gast #2557518
Du kannst nicht ein ganzes Array mit einer Funktion zurückgeben. Immer 
nur einen Wert. Was du machen kannst, ist in den Aufrufparametern die 
Pointer von Arrays (also nicht nur "cMyFstArray" und "cMySndArray", 
sondern auch das Ergebnisarray "cMyResultat") anzugeben.
Aber damit arbeitest Du auch nur außerhalb der Funktion auf den global 
vorhandenen Arrays und nicht lokal in der Funktion.
Das Ergebnisarray wird nicht in voller Länge nach Return der Funktion 
auf dem Stack liegen, sondern nur der Pointer auf das erste Element.

Blackbird
#2557529
Blackbird schrieb:
> Das Ergebnisarray wird nicht in voller Länge nach Return der Funktion
> auf dem Stack liegen, sondern nur der Pointer auf das erste Element.

Und in dem Fall vom TO nicht mal das, sondern eigentlich nur Mist. Es 
wird das Ergebnis der Addition selbst ein Zeiger. Und nicht dort 
eingetragen, wo der Pointer hinzeigt.

Wenn's der Übersicht dient, könnte man vielleicht 'cMyResultat' in der 
Funktion als 'static' deklarieren und einen Zeiger darauf zurückgeben.
Gast #2559304
Ralf G. schrieb:
>> nur nicht die Möglichkeit ein ganzes Array zurückzugeben.
> Das geht schon, ist aber nicht üblich.

Es geht nicht. Die einzige Möglichkeit, sowas indirekt hinzutricksen, 
wäre eine Struktur zu definieren, die ein Array enthält und diese 
zurückzugeben. Direkt kann man komplette Arrays weder an Funktionen 
übergeben, noch per return zurückgeben. Es wird dabei immer automatisch 
ein Zeiger auf das erste Element daraus.
#2559318
Braucht man doch auch gar nicht.
Entweder man übergibt der Prozedur 3 Zeiger auf Arrays, die man schon 
ausserhalb angelegt bzw. dafür Speicher reserviert hat:

void AddArray(char result[], char ar1[], char ar2[], int length)

oder man addiert das Array ar2 zu ar1 dazu und das Ergebnis steht dann 
in ar1

void AddArray(char ar1[], char ar2[], int length)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.