array an Funktion übergeben, was ist geschickter?



  • Hallo,

    grad stellt sich mir folgendes Problem, dass ich ein dynamisches array an eine Funktion übergeben und dort initialisieren will. Mein ursprünglicher Ansatz war der, dass in der Funktion auch erst der Speicherplatz des arrays allokiert wird.

    #include <stdio.h>
    #include <stdlib.h>
    
    void pointer(int** p, int n)
    {
      int i ;
    
      *p = (int*)malloc(n*sizeof(int)) ;
    //   
      for(i = 0;i<n;i++)
      {
        (*p)[i] = i+3 ;
      }
    
      for(i = 0;i<n;i++)
      {
        printf( "%d \n",(*p)[i]) ;
      }
      printf( "\n" ) ;
    }
    
    int main()
    {
      int *p ;
      int n,i ;
    
      n = 10 ;
    
      pointer(&p,n) ;
    
      for(i = 0;i<n;i++)
      {
        printf( "%d \n",p[i]) ;
      }
    
      return 0 ;
    }
    

    Das ist denk ich die einzige Methode, wie man das sonst hinbekommt. Das ganze wird aber etwas mühselig und unübersichtlich durch das Dereferenzieren. Außerdem hab ich das Gefühl das dies schlechter Programmierstil ist. Daher der andere Ansatz, dass ich in der Hauptfunktion Speicherplatz für das Array allokiere und dann an die Funtkion übergebe. t Das sähe dann so aus:

    #include <stdio.h>
    #include <stdlib.h>
    
    void pointer(int* p, int n)
    {
      int i ;
    
    //   
      for(i = 0;i<n;i++)
      {
        p[i] = i+3 ;
      }
    
      for(i = 0;i<n;i++)
      {
        printf( "%d \n",p[i]) ;
      }
    }
    
    int main()
    {
      int *p ;
      int n,i ;
    
      n = 10 ;
      p = (int*)malloc(n*sizeof(int)) ;
      pointer(p,n) ;
    
      for(i = 0;i<n;i++)
      {
        printf( "%d \n",p[i]) ;
      }
    
      return 0 ;
    }
    

    Welche der beiden Versionen würde dem besseren Progammierstil entsprechen bzw. ist sinnvoller?

    Gruß Stepp



  • Es kommt darauf an, was du häufiger brauchst.

    Wenn du öfter Speicher brauchst, der initialisiert ist: Version 1
    Wenn du öfter Speicher initialisiert willst : Version 2

    Version 1 entlastet main()

    Oder eine Mischung. main() ruft pointer1() zum Speicher holen, das ruft dann pointer2() zum initialisieren auf.



  • Ich muss das array nur einmal initialisieren und benutze später auch einen 2D array. Das sieht bei der Funktionsübergabe dann nicht mehr so schön aus.
    int***

    Mir gings auch gerad drum die main zu entlasten bzw. das es dort übersichtlich ist und nur Funktionsaufrufe nötig sind.


Log in to reply