Arrays an Funktionen übergeben
-
Hallo Leute,
Ich habe folgenden Sachverhalt. Ich habe zwei Arrays, eines hat 2 Dimensionen, das andere hat nur eine Dimension. Diese beiden Arrays möchte ich an eine Funktion übergeben. Dies tue ich so:
funktionA(Array2Dim, Array1Dim, ArrayLaenge);
Die Funktion ist in einer anderen C Datei definiert, ihr Prototyp sieht so aus:
void funktionA(int[][] Array2Dim, int[] Array1Dim, int ArrayLaenge);
Was genau ist daran falsch? Sieht das einer. Ich übergebe Zeiger und funktionA erwartet Zeiger. Ich erhalte folgenden Fehler:
array type has incomplete element type
Ich habe versucht, den Funktionsprototyp in folgendes zu ändern:
void funktionA(int **Array2Dim, int *Array1Dim, int ArrayLaenge);
Ich erhalte auch so den Fehler:
passing argument 1 of ‘funktionA’ from incompatible pointer type
Gruß
-
Hallo,
hier ein Beispiel wie's geht:
#include <stdio.h> #include <stdlib.h> static void fillFunction( int int_array[][2], int length ) { for( size_t i=0; i<2; i++ ) for( size_t j=0; j<length; j++ ) int_array[j][i] = rand(); } static void outFunction( int int_array[][2], int length ) { for( size_t i=0; i<2; i++ ) for( size_t j=0; j<length; j++ ) printf( "%d ", int_array[j][i] ); } int main( void ) { int int_array[6][2]; fillFunction( int_array, 6 ); outFunction( int_array, 6 ); return 0; }
mfg Martin
-
ANSI C definiert:
<A declaration of a function parameter as 'array of type' is adjusted to 'pointer to type.'>
Dies ist auch die einzige Stelle, an welcher Array und Zeiger mal wirklich gleich behandelt werden.void f(int a[], int b[][1], int c[][1][2])
ist also gleichbedeutend zu:
void f(int *a, int (*b)[1], int (*c)[1][2])
Dies gilt aber nur für die 1.Ebene, d.h.
int b[][1]
ist NICHT gleichbedeutend zu
int **b
was dein Problem erklärt.
Deshalb kann man übrigens statt
main(int argc,char *argv[])
auch schreiben:
main(int argc,char**argv)
-
So als Hinweis:
Wenn du als Parameter ein Array angibst, darf nur die erste Dimension frei bleiben, alle anderen müssen fest angegeben sein. Sonst weiß C nicht, wie weit es springen muss, um zum nächsten Index zu kommen.