Wo brauch man es?



  • Man brauch Zeiger um Werte in einer Funktion ändern zu können. Aber man brauch eine Variable vom Typ Zeiger auf Zeiger wenn man einen Zeiger an eine Funktion reichen will und diesen verändern will. Aber brauch man darüber hinaus auch jemals einen Zeiger auf einen Zeiger auf einen Zeiger also so etwas wie ein int*** ? gibt es dafür denn einen sinnvollen Einsatz oder ist int* und int** eigentlich alles was man braucht?



  • Fredo schrieb:

    Aber brauch man darüber hinaus auch jemals einen Zeiger auf einen Zeiger auf einen Zeiger also so etwas wie ein int*** ? gibt es dafür denn einen sinnvollen Einsatz oder ist int* und int** eigentlich alles was man braucht?

    wenn man mehrdimensionale Arrays bzw. Zeiger darauf an Funktionen übergeben will natürlich.

    Ansonsten sollte man es aber vermeiden, da es Programmierer erfahrungsgemäß verwirrt und daher fehleranfällig ist.



  • Gelegentlich sind Dreifachzeiger auch ohne mehrdimensionale Arrays sinnvoll, z.B. hier für eine Funktion, die etwas an eine Liste anhängen soll:

    struct listnode {
        int data;
        struct listnode *next;
    };
    
    void append(struct listnode ***listend, struct listnode *node)
    {
        **listend = node;
        node->next = NULL;
        *listend = &node->next;
    }
    
    /* und dann irgendwo... */
    struct listnode *listhead = NULL;
    struct listnode **listend = &listhead;
    
    append(&listend, somenode);
    append(&listend, anothernode);
    

    Generell kann man natürlich jeden Mehrfachzeiger vermeiden, indem man Zeiger in zusätzlichen Strukturen oder als typedefs versteckt und dann darauf zeigt.


Anmelden zum Antworten