return array



  • Guten Tag zusammen,

    ich habe eine Frage bzgl. genannten Betreff. Das Forum habe ich auch schon soweit durchsucht, bin aber nicht wirklich schlauer geworden.

    Ich habe Folgendes:

    int main(void)
    {
        int *test=macheWas();
        int k=0;    
        for(k=0; k<(sizeof(test)/sizeof(int));k++)
            printf("%d\n", test[k]);
        return 0;
    }
    
    int *macheWas()
    {
        int irgendeinArray[5];
        irgendeinArray[0]=1;
        irgendeinArray[1]=2;
        irgendeinArray[2]=3;
        irgendeinArray[3]=4;
        irgendeinArray[4]=5;  
    
        return irgendeinArray;
    }
    

    Die macheWas bekommt zwar noch werte übergeben, spielen aber für das Problem keine Rolle.
    So, das "return Array" funktioniert nicht, bzw. in dem printf in der Main bekomme ich immer nur die 1 ausgegeben. Das test-Array hat auch nur die Size 1 und nicht wie angenommen die Size 5.

    Habe zwar schon in Erfahrung gebracht, dass ein Array als Rückgabewert nicht ganz so einfach zu handlen ist, aber irgendwie muss es ja gehen.
    Kann mir jemand helfen?

    Grüße,
    Sneeker



  • Hi,

    int irgendeinArray[5];

    dieses Array lebt nur innerhalb der Funktion. Stichwort: Lokale Variable.
    Je nachdem was du vorhast, bietet sich die Erzeugung dynamischer Arrays mit malloc und co, oder ein funktions-/modulglobales Array an.

    Gruß,
    B.B.



  • Hm...

    habe versucht das Array "irgendeinArray" global zu mache mit

    int *whole=(int *)malloc(sizeof(int));
    

    aber das klappt natürlich wegen: initializer element is not constant.

    Komme grad echt nicht weiter wie ich das lösen kann.



  • int *whole=(int *)malloc(sizeof(int));

    Das ist in C so nicht machbar.

    Zum Erzeugen und Bearbeiten von dynamischen Arrays würde ich mir entsprechende Funktionen
    schreiben, die diese Aufgaben übernehmen.

    Hier ein Beispiel mit einem globalen und einem dynamischen Array:

    #define N 10
    int globales_array[N] = {0};
    
    int* array_factory ( unsigned n )
    {
    	int* a = malloc ( n * sizeof(int) );
    	if ( a == NULL )
    		puts(strerror(errno));
    	return a;
    }
    
    void mach_etwas ( int* a, unsigned n )
    {
    	int i = 0;
    	while ( i<n )
    		a[i++] = i;
    }
    
    void show_array ( int* a, unsigned n )
    {
    	int i = 0;
    	while ( i<n )
    		printf("%d ", a[i++] );
    }
    
    int main() 
    { 
    	unsigned n = 10;
    	int* my_array = array_factory (n);
    	if ( NULL != my_array )
    		mach_etwas ( my_array, n );
    	mach_etwas(globales_array, N);
    
    	show_array ( my_array, n );
    
    	show_array ( globales_array, N );
    
    	free ( my_array );
    
    	return 0; 
    }
    


  • Für ein statisches (aber nicht zu großes) Array würde ich es in eine Struktur packen:

    struct ArrayWrapper
    {
      int irgendeinArray[5];
    };
    
    struct ArrayWrapper macheWas()
    {
        struct ArrayWrapper arrayWrapper;
    
        arrayWrapper.irgendeinArray[0] = 42;
        ...
    
        return ArrayWrapper;
    }
    

    Alternativ das Array als Parameter von außen übergeben und dann nur füllen.



  • Ok, ich werde mich mal weiter dransetzen.


Log in to reply