Ein Array zurückgeben

Gast #2557490
Lesenswert?

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 #2557518
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren