Zeiger



  • Das erste ist ein Zeiger auf ein Array mit fünf Integern.
    Das zweite ist ein Array von fünf Integern.

    Das erste könnte auf die Adresse vom zweiten zeigen.



  • ja stimmt. das ist genau pointer auf einen array. Aber jeder array ist doch ein pointer. Wenn ich einen Array so deklariere:

    int c[5];
    

    kann ich seine Elemente auch so aufrufen:

    *c; c[1]
    

    Also theoretisch solletn diese beiden Schreibweisen gleichdeutig sein, sind sie aber nicht. Bei (*c)[5] funktioniert nämlich so was nicht:

    c[1]
    

    so was aber schon:

    *c[1]
    

    Ein Array vor Pointern ist es doch nicht, denn es würde dann so aussehen:

    int *c[5]
    

    bin verwirrt!



  • die klammern kann man getrost weg lassen.
    also ist es ein zeiger auf ein array

    int c[][5];
    

    müsste das gleiche sein oder?
    und eine referenz macht man mit einem kaufmannsund.



  • lxv schrieb:

    Aber jeder array ist doch ein pointer.

    Nein. Vergiss das einfach, dann sollte auch die Verwirrung verschwinden.



  • Mir wurde immer gesagt, Array=Zeiger. Sagt mir bitte also ganz klar, was der Unterschied ist zwischen beiden Schreibweisen und wie es jeweils funktioniert.



  • Ein Array ist kein Zeiger. Ein Array lässt sich - unter den entsprechenden Umständen - implizit in einen Zeiger auf das erste Element umwandeln, aber deshalb sind das noch nicht die gleichen Dinger.

    Behauptung: Ein Array ist ein Zeiger.
    Widerlegung durch Gegenbeweis:

    int *a;
    int b[5];
    assert( sizeof a == sizeof b ); // assertion failed
    
    /* oder */
    
    template< typename T, unsigned N > void f( T ( *array )[ N ] ) {}
    
    f( a ); // fehler
    f( b ); // funktioniert
    


  • ok, verstanden. Was bedeutet (*a)[7] denn und wie's funktioniert?



  • oder formuliere ich mal meine Frage anders:

    was ist der Unterschied zwischen int (*a)[]=&b (wobei b ein Array mit 6 Elementem ist) und int (*a)[6]=&b?
    Warum im 1. Fall kann ich so nicht schreiben: a++, im 2. Fall aber schon?



  • bist du dir sicher, dass das überhaupt funktioniert was du da schreibst?



  • ja, ich experimentiere grad in Borland. Das macht ja sinn, ein pointer auf ein array sieht so aus: int (*pointer)[]=&array, ich kann aber nicht auf die idee kommen, was der unterschied ist, wenn ich die größe des arrays eingebe und wenn nicht. Und warum kann ich im fall, wenn ich das getan hab, den pointer inkrementieren: pointer++, obwohl man das normalerweise nicht darf.


Anmelden zum Antworten