2017-05-24 3 views
1

dies ist mein Code:initialisieren Werte von dynamischen Arrays in einer Funktion (Programmiersprache C)

void init_array(int** array) { 

    *array = (int*) malloc(3 * sizeof(int)); 

    /* ???? **(array+2) = 666; */ 

    return; 
} 

void init(int* array, int* length) { 

    *length = 3; 

    *(array+0) = 0; 
    *(array+1) = 1; 
    *(array+2) = 2; 

    return; 

} 

int main(void) { 

    /* Variables */ 

    int array_length; 
    int* array; 

    /* Initialize */ 

    init_array(&array); 
    init(array, &array_length); 

    free(array); 

    return 0; 

} 

Meine Frage ist: Wie kann ich Wert des Arrays in einer Funktion init_array initialisieren().

Ich habe Dinge versucht, wie zum Beispiel:

  • **(array+2) = 666;
  • *(*(array+2)) = 666;
  • *array[2] = 666;
  • **array[2] = 666;

Wenn ich verwenden Bleistift und Papier, das ich führen kam, dass **(array+2) funktionieren soll aber es gibt mir eine Segmentierung f ault.

Ich würde Ihre Antwort schätzen, weil ich verwirrt bin, wie Zeiger in C tatsächlich arbeiten.

+2

versuchen Sie '(* Array) [2] = 666;' und kompilieren Sie mit allen Warnungen auf. –

+0

Ich bin vertraut mit C++, aber ich brauche Sie den "new" -Operator oder was auch immer zu einem Objekt zu deklarieren und dann die Werte in der angegebenen Adresse zu erstellen. – pandoragami

+0

gibt es keine neuen in C. –

Antwort

3

Sie haben die Adresse eines Zeigers auf die Funktion übergeben:

array 

Sie möchten, dass zu dereferenzieren den Zeiger zu erhalten:

*array 

Dann das Array Index-Operator auf das Ergebnis anwenden:

(*array)[2] 

oder äquivalent:

*((*array) + 2) 

Die Klammern sind erforderlich, da der Array-Index-Operator [] eine höhere Priorität hat als der Dereferenzierungsoperator *.

Im Allgemeinen sollten Sie den Array-Index-Operator verwenden, wann immer es möglich ist, da es tendenziell einfacher zu lesen ist.

Verwandte Themen