Vektor als Return-Wert einer Funktion
-
Wie kann man bei einer Funktion, z.B.:
unsigned char add(unsigned char a[],unsigned char e[]) { unsigned char u=0,x; long n; for(n=N;n>=0;n--) { x = e[n] + a[n] + u; e[n] = x % 10; u = x / 10; } return e[]; }
einen Vektor zurückgeben? So funktioniert's nicht, was muss denn dann nach dem return stehen??
-
Wenn Du direkt e[] verändern willst, dann würde ich eine Refferenz auf e[] als Parameter übergeben lassen, und dann dort direkt dran arbeiten.
Also würde der Funktionsprototyp dann so aussehen:
void add(const unsigned char * a,unsigned char * e)
Man könnte auch den Rückgabe wert INT machen und darin die neue Länge des Array übergeben.
Ich habe jetzt hierbei auch a als einen Zeiger genommen, damit nicht das komplette Array durch den SPeicher geschichtet werden muss, sondern halt nur die Adresse dahin. Und es ist const, damit man es nicht ausversehen verändern kann. Der aufrufd der Funktion muss dann ungefähr so aussehen:
add("text 2 add", &myChar)
Ein Nachteil dieser Methode ist es halt, daß als Param2 zwingend eine Referenz auf ein bereits existierendes Char-Array übergeben werden muss.
*edit*
Wenn Du dagegen beide Parameter als Text in Anführungszeichen übergeben können willstz, musst Du innerhalb der Funktion Speicherplatz anfordern (malloc/new, weiß nicht was davon nu ANSI C ist) und dann einen Zeiger darauf zurückgeben. Dann wäre der Prototyp ungefähr so:
unsigned char& add(const unsigned char * a, const unsigned char * e)
Wobei ich mir hier bei der Deklaration nicht ganz sicher bin. Mit Funktionen die Referenzen zurückliefern habe ich noch nicht so sehr gearbeitet. Statt des & könnte da auch ein * hinmüssen. Ausprobieren kann ich hier nicht. Aufrufen dann ungefähr so:
unsigned char *test; test=add("Dies ist ein", "Beispiel");
-
NobbZ schrieb:
Ich habe jetzt hierbei auch a als einen Zeiger genommen, damit nicht das komplette Array durch den SPeicher geschichtet werden muss,
Das wirds auch bei
type foo[]
nicht, da hier auch nur ein Zeiger uebergeben wird. Deine Variante macht das aber deutlicher, als die urspruengliche.