Vektor dynamisch erstellen mit Doppelzeiger



  • Hallo zusammen,

    ich bin absolute Programmieranfängerin und kämpfe mich gerade durch Pointerarithmetik etc.
    Konkret verstehe ich folgenden code nicht:

    void createb(double **b,int n){                                            
      *b = (double*)malloc(sizeof(double)*n);
      for(int i=0;i<n;i++){
        (*b)[i]=i;
      }
    }
    

    Die Funktionen soll einen Vektor b der variablen Größe n anlegen und die einzelnen Werte sollen 0,1,2,....,n-1 sein
    Warum brauche ich hier einen Doppelpointer? Ich kannte bisher die dynamische Reservierung von Speicherplatz mit einfachem pointer, z.B.

    double *vec=(double *)malloc(n*sizeof (double));
    

    Ich hätte dann die Wertzuweisung einfach so versucht:

    for(int i=0;i<n;i++){
       b[i]=i;
    }
    

    Was bedeutet stattdessen

    (*b)[i]=i;
    

    ?

    Vielen Dank schonmal für eure Mühe
    Gruß Biene 🙂



  • BieneMaya schrieb:

    Warum brauche ich hier einen Doppelpointer? Ich kannte bisher die dynamische Reservierung von Speicherplatz mit einfachem pointer, z.B.

    double *vec=(double *)malloc(n*sizeof (double));
    

    Wenn b ein Doppelpointer ist, dann ist *b ein einfacher Pointer, es funktioniert also genauso wie gehabt.

    Der Zeiger auf den Zeiger hat hier schlicht und einfach den Sinn, dass die Zuweisung an den Zeiger sich beim Aufrufer bemerkbar macht, denn der ruft ja so auf:

    double *vector;
    createb(&vector, 3);
    

    und erwartet, dass sein vector dann auf den in createb angelegten Vektor zeigt.


Anmelden zum Antworten