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;
}
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
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.
unbekannt schrieb:> Hallo,>> wenn ich gut vestanden habe, ist meine Code nicht ganz falsch.Es gibt
Doch, ist falsch. Siehe:
Blackbird schrieb:> cMyResultat[i]=pFstArray[i]+pSndArray[i];> nur nicht die Möglichkeit ein ganzes Array zurückzugeben.
Das geht schon, ist aber nicht üblich. Kostet viel Speicher.
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.
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)
Rolf Magnus schrieb:> Die einzige Möglichkeit, sowas indirekt hinzutricksen,> wäre eine Struktur zu definieren, die ein Array enthält
Ja, sowas hatte ich gedacht. Unüblich => nur Zeiger hin- und
herzureichen macht man ja, damit es effektiv wird.
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.