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.


Anmelden zum Antworten