Felder übergeben
-
Mahlzeit!!
Heute ist wohl nicht mein Tag. Ich hänge schon den ganzen Vormittag daran rum, wie ich ein in einer Funktion erzeugtes Feld an eine andere Funktion übergeben kann. Kann mir bitte jemand auf die Sprünge helfen???
Dankeschön
-
So:
void func() { int arr[5]; foo(arr); }; void foo(int *array) { //... };
-
feld bedeutet array.
void foo(int *a) { *a = 123; a[1] = 42; } int main(void) { int feld[10]; feld[0] = 12; feld[3] = 456; foo(feld); printf("%d %d %d %d", feld[0], feld[1], feld[2], feld[3]); return 0; }
arrays lassen sich in pointer casten, die man dann nahezu wie arrays verwenden kann.
einzig "sizeof" unterscheidet sich:
sizeof(array) = laenge des arrays in bytes
sizeof(pointer) groesse des pointers in bytes (auf 32bit sinds 4)
-
Ja okai so weit hatte ich mich schon durchgewühlt, aber ich habe in einer Funktion ein Feld mit beispielsweise 4000 bit's errechnet und die sollen nun sowohl in main ausgegeben werden, als auch für andere Funktionen nutzbar sein.
MichBau
-
Es gibt 3 Möglichkeiten Felder zu übergeben.
Alle nutzen "call bei reference"func1( int Array[10]) // Array mit bestimmter Größe
func2( int Array[]) // Array unbekannter Größe
func3( int * Array) // Zeigeraus main heraus bewirkt dann
der Aufruf jeweils dasselbe,
sofern der Funktionsinhalt identisch ist!
-
hallo Leute,
ich hab auch so ein ähnliches Problem. Ich möchte eine Funktion schreiben, die die Summe aller Elemente einer Matrix addiert.
Folgendes hab ich bisher geschafft:
int matrixsum (int *matrix,int zeilen, int spalten) { int test=0; test=*matrix[0][0]; return 0; } int _tmain(int argc, _TCHAR* argv[]) { int summe=0; int matrix[2][3]={{1,2,3},{4,5,6}}; summe=matrixsum(&matrix[0][0],2,3); }
Nun erhalte ich folgenden Fehler:
error C2109: Index erfordert ein Array oder einen Zeigertyp
Kann mir jemand sagen, wo mein Fehler liegt?
Danke schon mal
MfG Benjamin
-
Ja, kann ich - du kannst einen Pointer nur einmal dereferenzieren, also benötigst du dort einen anderen Datentyp:
int sum(int*matrix[3],int zeilen)//spalten brauchst du nicht, da fest vorgegeben {...} int mat[2][3]={...}; int summe=sum(mat,2);
Aber in den meisten Fällen ist es wohl günstiger, statt int[][] einen int** zu verwenden - auch wenn die Verwaltung dort etwas aufwendiger ist.
-
int matrixsum ([b]int matrix[][3][/b],int zeilen) { int test=0; test=[b]matrix[0][0][/b]; return 0; } int main(int argc, char *argv[]) { int summe=0; int matrix[2][3]={{1,2,3},{4,5,6}}; summe=[b]matrixsum(matrix,2)[/b]; }
automatische 2d arrays existieren nur durch compilermagic. es sind eigentlich normale 1d arrays aber die zwei indices werden vom compiler so verrechnet: [x + xdim*y]
wenn du solche arrays uebergibst, gehen die infos verloren.
du koenntest auch folgendes machen:int matrixsum ([b]int *matrix[/b],int zeilen, int spalten) { int test=0; test=[b]matrix[0 + spalten*0][/b]; // spalte + spaltenzahl*zeile return 0; } int main(int argc, char *argv[]) { int summe=0; int matrix[2][3]={{1,2,3},{4,5,6}}; summe=[b]matrixsum(matrix,2,3)[/b]; }
cstoll: du verwechselst offenbar typ** mit typ[][] typen...