Was bedeutet (void**)?



  • Guten Abend! Mal folgendes Codebeispiel:

    status = mServiceManager->GetService(mCID, aIID, (void**)aInstancePtr);
    

    was genau bedeutet hier (void**) ? Ich weiss, dass die Klammerung eine alte Schreibweise für cast ist und ein void* ist ein Zeiger ohne Typ. Aber was hat es mit den 2 Sternen auf sich und wozu setzt man die ein?



  • naja, ein void* ist ein Zeiger auf etwas unbekanntes (void eben).
    und ein void** ist dann ein Zeiger auf einen void*.

    denn ein void* oder generell ein Zeiger ist im Endeffekt ja auch nur eine Variable.
    und auf jede Variable, kann es mehr oder weniger einen Zeiger geben.
    das heißt, man kann das sogar beliebeig fortsetzen:

    char h = 'h';
    char* p = &h;
    char** pp = &p;
    char*** ppp = &pp;
    
    // aber wozu braucht man das?
    // guck dir das mal an:
    
    #include <iostream>
    #include <cstring>
    
    void do_something(char** pp)
    {
    *pp = new char[11];
    strcpy(*pp, "Hallo Welt!");
    }
    
    int main(int argc, char** argv)
    {
    char* msg = NULL;
    do_something(&msg);
    std::cout << msg << std::endl;
    delete[] msg;
    std::cin.get();
    return 0;
    }
    

    übrigens: so, wie man * auch für dynamische Arrays nutzen kann,
    so kann man auch ein Array von Zeigern, oder ein Array von Arrays als ** darstellen, wie man bei

    int main(int argc, char** argv)
    

    sehen kann.
    hier ist argv ein Array von char-Arrays.


Anmelden zum Antworten