Hallo, ich habe eine Funktion, die mehrere Rückgabewerte hat. Bei "return" eine, die anderen werden der Funktion übergeben: Hauptfunktion: unsigned char Array1[12]; unsigned char Array2[10]; unsigned char Rueckgabewert; rueckgabewert = testfunktion(Array1, Array2); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Unterfunktion: unsigned char testfunktion(unsigned char * ArrayX, unsigned char * ArrayY) { strcpy(ArrayX, "xxx"); strcpy(ArrayY, "yyy"); return (123); } Das Zugreifen auf die 2 Arrays in der Unterfunktion funktioniert problemlos. Nun möchte ich noch eine weitere Variable (Integer-Zahl, kein Array) der Unterfunktion übergeben und dort zugreifen. Im Prinzip ist es mir klar, daß ich die Adresse der Integerzahl übergeben muß. Die Unterfunktion muß dann denn Wert in die Speichestelle der übergebenen Adresse zuweisen. Aber wie muß ich die Sache nun bei Integer definieren? Ich habs leider nicht so mit Zeigern... So in der Art müßte es aussehen: Hauptfunktion: unsigned char Array1[12]; unsigned char Array2[10]; unsigned char Rueckgabewert; int Integerzahl; rueckgabewert = testfunktion(Array1, Array2, Integerzahl); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Unterfunktion: unsigned char testfunktion(unsigned char * ArrayX, unsigned char * ArrayY, int* IntegerZ) { strcpy(ArrayX, "xxx"); strcpy(ArrayY, "yyy"); IntegerZ = 0xfe33; return (123); } Aber wie muß ich das mit dem Integer korrekt definieren???
rueckgabewert = testfunktion(Array1, Array2, &Integerzahl); ... *IntegerZ = 0xfe33;
@ *.*: Danke für die schnelle Antwort. Ist die von mir angegeben Deklaration der Unterfunktion korrekt: unsigned char testfunktion(unsigned char * ArrayX, unsigned char * ArrayY, int* IntegerZ) Oder muß man hier auch noch was ändern? (ich kann es gerade nicht testen, da ich nicht mehr in meinem Hobbyraum bin und der PC im Wohnzimmer hat keinen Compiler drauf).
OK. Danke für die Antwort. Wenn ich da schon einen Fachmann habe ... ich habe da noch ein anderes Problem: Hauptfunktion: unsigned char Array1[12]; testfunktion(Array1); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Unterfunktion: testfunktion(unsigned char * ArrayX) { int Integerzahl; Integerzahl = sizeof(ArrayX); return; } Warum kommt bei Sizeof immer nur "2" als Ergebnis in der Unterfunktion raus, egal wie groß das Array in der Hauptfunktion ist? Hat sicherlich mit dem "Zeiger-Zeugs" zu tun. Ich bin nicht drauf gekommen, warum das so ist. Nun habe ich der Funktion noch einen Integerwert übergeben, der die Länge liefert: testfunktion(Array1, sizeof(Array1)); anders wußte ich mir nicht zu helfen. Kann man die Arraylänge innnerhalb der Funktion nicht irgend wie abfragen?
Schau mal genau sizeof was du machst. Hier wohl ein Zeiger.
ArrayX steht hier für einen Zeiger auf ein Array, der auf deiner Platform wohl 2 byte lang ist. Information über Länge (die hat eh nur der Compiler) ist hier nicht mehr vorhanden. Die Länge des Arrays extra zu übergeben ist gängige Praxis. Anders geht es nicht, wenn man keine weiteren Informationen über den Inhalt des Arrays zulässt. Z.B. wenn man immer eine mit \0 terminierte Zeichenfolge darin stehen hat könnte man strlen(...) verwenden. Oder man kann einen Zeiger auf ein struct übergeben das aus der Länge und dem Zeiger auf das Array besteht, aber das wird dann schon aufwändiger als den Längenwert extra zu übergeben.
@ icke: daß es wohl die Länge eines Zeigers und nicht die Länge des Arrays ist, hab ich mir schon gedacht. Aber wie kann ich in der Unterfunktion die Länge des Arrays abfragen? @*.* Ich glaube dann lasse ich es so mit dem zusätzlich übergebenen Parameter.... Das mit der mit \0 terminierte Zeichenfolge ist zwar ne sehr gute Idee, aber dann muß man aufpassen, daß man beim Funktionsaufruf das Array immer entsprechend "modifiziert" hat. Das ist mir doch etwas zu gefährlich. Nochmals Danke für Deine Antworten!
> Aber wie kann ich in der Unterfunktion die Länge des Arrays abfragen?
Gar nicht. Muss der Aufrufer als weiteren Parameter übergeben.
@Bartli: OK, wurde ja schon hier geklärt, daß dies die sinnvollste Variante ist.
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.