Array an Funktion übergeben (und zurück)

Hallo,

Ich habe ein Array mit 1600 Einträgen.
Diese möchte ich auf verschiedene Arten bearbeiten.
Da ich nicht alles in der Main-Fkt. machen will, dachte ich an Auslagerung in Funktionen.

Das Problem ist nun:
Wie kriege ich das Array in die Funktion?

Und schwieriger:
Wie kriege ich das Array wieder aus der Funktion?

Natürlich sollen keine Daten verloren gehen, und in der Funktion werden ziemlich viele geändert…

Ich habe es mit Pointern versucht, aber das ist mir nicht gelungen (Pointer sind mir nicht so vertraut) und auch ein (globales) Struct hat bei der Rückgabe versagt…

Hat jemand eine Idee?

Jan

Hallo Jan,
spontan fällt mir zum Thema Zurückübergeben das return aus der Unterfunktion ein. Damit kannst Du den Array wieder zurückgeben.
Dazu muss Du dann im main die Funktion einer Variablen zuweisen.

array2 = function (array1);

Wenn Du dann im Unterprogramm function, darf dann natürlich nicht void sein, mit return (array) dein Array übergibst, wird dieser (hoffentlich) der Variablen array2 übergeben. Aber Sicher bin ich mir da jetzt nicht. Müsste man halt mal ausprobieren.

CU

Stefan Hager

Hallo Jan,

Du übergibst der Bearbeitungsfunktion einfach einen Zeiger auf das erste Element des Arrays, es dürfte keinerlei Probleme machen. Zurückliefern muß diese Funktion nichts, da sie direkt auf das Array zugreifen kann:

void main(void)
{
int array[1600];

DoIt(array);
}

void DoIt(int* pArr)
{
int i;
for(i = 0; i

Hallo Jan

Hier noch ein kleiner Nachtrag zum vorschlag von Patrik:

Durch das verwenden eines typedef kennt der Compiler die Grösse des, an DoIt() übergebenen Arrays und kann einen Fehler melden, wenn du z.B. versuchst pArr[1601] anzusprechen.

typedef int array[1600] MyArry;

void main(void)
{
MyArry array;

DoIt(array);
}

void DoIt( MyArry * pArr)
{
int i;
for(i = 0; i typedef int MyArryTyp;
typedef MyArryTyp array[1600] MyArry;

void main(void)
{
MyArry array;

DoIt(array);
}

void DoIt( MyArry * pArr)
{
int i;
for(i = 0; i (sizeof(MyArry) / sizeof(MyArryTyp)); i++)
{
pArr[i] = 0; // z.B.
}
}

Jetzt kannst du deine Array grösser oder kleiner dimensionieren oder den Datentyp von int auf long ändern ohne irgend etwas am Rest des Programms zu ändern.

MfG Peter(TOO)