Was bedeutet "**"?



  • Guten Tag allerseits,

    ich bin in einem Turorial auf folgende Deklaration gestoßen:

    IDirect3DDevice9 **ppReturnedDeviceInterface
    

    Allerdings habe ich ** vor einem Bezeichner noch nie gesehen. Ich weis das *Bezeichner ein Zeiger ist.

    Kann mir jmd bitte kurz erklären, was ** zu bedeuten hat oder mir einen Link posten, wo es erklärt wird.(Google brachte nichts hervor)

    (Ist es möglicherweise ein Tippfehler)

    Danke schonmal im Voraus

    Don Quijote



  • (IDirect3DDevice9*) *ppReturnedDeviceInterface

    jetzt klarer?



  • Tippgeber schrieb:

    (IDirect3DDevice9*) *ppReturnedDeviceInterface

    jetzt klarer?

    Ach so: das ist kein Cast, ich habe dir nur den Typ auf den gezeigt wird geklammert.



  • Also ein Zeiger auf einen Zeiger?

    Ich versteh das immer noch nicht so richtig



  • Don Quijote schrieb:

    Also ein Zeiger auf einen Zeiger?

    Ich versteh das immer noch nicht so richtig

    Genau, du hast einen Zeiger der auf eine Speicheradresse verweist welche selber eine Adresse (auf eine andere Speicheradresse) speichert.
    Also einfach eine doppelte Indirektion.



  • Don Quijote schrieb:

    Also ein Zeiger auf einen Zeiger?

    Ich versteh das immer noch nicht so richtig

    gegeben sei ein Typ T. Egal welcher. int, char, foo, string,...

    Dann ist
    T* p;

    ein Zeiger auf T.
    Was aber wenn T nun sagen wir ein char* waere?
    T* p;
    wuerde dann zu
    char** p;
    werden.

    T* ist einfach nur ein Zeiger auf T. Und T kann jeder Typ sein. Auch selber wiederum ein Zeiger. Zeiger sind ganz normale typen, da ist keine Magie dabei.

    Man kann also auch ein
    T*************************************************************** p;
    machen.



  • Shade Of Mine schrieb:

    Don Quijote schrieb:

    Also ein Zeiger auf einen Zeiger?

    Ich versteh das immer noch nicht so richtig

    gegeben sei ein Typ T. Egal welcher. int, char, foo, string,...

    Dann ist
    T* p;

    ein Zeiger auf T.
    Was aber wenn T nun sagen wir ein char* waere?
    T* p;
    wuerde dann zu
    char** p;
    werden.

    T* ist einfach nur ein Zeiger auf T. Und T kann jeder Typ sein. Auch selber wiederum ein Zeiger. Zeiger sind ganz normale typen, da ist keine Magie dabei.

    Man kann also auch ein
    T*************************************************************** p;
    machen.

    Das geht aber nicht unbegrenzt, ich glaube 7 Indirektionen werden durch den Standard mindestens gefordert.



  • Ok, klingt total logisch.

    Vielen dank euch beiden für die schnelle und kompetente Hilfe 😉



  • Tippgeber schrieb:

    Das geht aber nicht unbegrenzt, ich glaube 7 Indirektionen werden durch den Standard mindestens gefordert.

    Das ist natürlich eine Einschränkung, die einem das Leben besonders schwer machen kann... :p

    Aber ist das tatsächlich so? Und bei typedef s werden auch alle Indirektionen berücksichtigt?



  • 7 Indirektionen werden durch den Standard mindestens gefordert.

    😮
    Ich muss meinen Code umschreiben gehen... 😉



  • Tja seht ihr, jetzt habt ihr Jahre eures Lebens verschwendet. Ich arbeite schon seit Jahren nur noch mit 7-dimensionalen Arrays (natürlich übernehme ich die Speicherverwaltung von Hand und copy 'n paste) 😃 😉



  • Aber du behauptest von dir, du programmierst in C++? 😉



  • Tippgeber schrieb:

    Tja seht ihr, jetzt habt ihr Jahre eures Lebens verschwendet. Ich arbeite schon seit Jahren nur noch mit 7-dimensionalen Arrays (natürlich übernehme ich die Speicherverwaltung von Hand und copy 'n paste) 😃 😉

    das tolle an c++, ich habe eine array klasse:

    array_n<int, 7> arr(make_array_n<7>(5,6,7,8,9,10,11));

    und schon kann man
    arr[0][1][2][3][4][5][6]=7;
    machen 😉



  • wollte mir auch mal sowas schreiben aber hab noch kein bock gehabt 😉

    mach ich mal bei gelegenheit



  • Skym0sh0 schrieb:

    mach ich mal bei gelegenheit

    Lohnt sich auf jeden Fall! 😃


Anmelden zum Antworten