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;
}
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
'cMyResultat' hast du doch global. Da brauchst du gar keinen Rückgabewert. Und sonst so, wie von Blackbird geschrieben.
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.
Hallo, wenn ich gut vestanden habe, ist meine Code nicht ganz falsch.Es gibt nur nicht die Möglichkeit ein ganzes Array zurückzugeben.
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.
Ralf G. schrieb: > Ja, sowas hatte ich gedacht. Unüblich => nur Zeiger hin- und > herzureichen macht man ja, damit es effektiv wird. effizient
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.