Pointer-Array-Inkrement



  • Guten sonnigen Morgen,

    Ich habe eine Frage, und zwar geht es um Werte von einem Array in ein anderes Array zu kopieren, das alles über den Dereferenzierungsoperator!

    int i;
        int iarry1[5000];
        int iarry2[1000];
    
        //arrays befüllen
        for (i=0;i<5000;i++){
            iarry1[i]=i;
        }
        for (i=0;i<1000;i++){
            iarry2[i]=i*3-2;
        }
    
        int *ptr1,*ptr2;
        ptr1=iarry1;
        ptr2=iarry2;
    
        for(i=0;i<1000;i++){
            //*iarry1++ = *iarry2++; FUNKTIONIERT NICHT
            //*ptr1++ = *ptr2++; // OK
    
            //*(iarry1+i) = *(iarry2+i);//OK
            //*(ptr1+i) = *(ptr2+i);//OK
        }
    

    Ja meine Frage ist halt wieso diese Zeile *iarry1++ = *iarry2++; nicht funktioniert. Denn logischerweise, ist Sie gleich der Zeile *ptr1++ = *ptr2++;, da ptr1=iarry1 ist.
    Das versteh ich nicht. Die anderen Zeilen mit OK die funktionieren.

    lG



  • Ganz einfach: Arrays sind keine Zeiger!

    Bei einem Array kannst du nach der Definition weder die Adresse noch die Größe ändern.
    Du bekommst über den Arraynamen die Adresse vom ersten Element. Mehr aber auch nicht.

    Ein Zeiger ist eine Variable, die eine Adresse speichert. Diese Adresse belegt Speicherplatz. Du brauchst also Speicher für den Zeiger und für die Daten auf dei der Zeiger verweist.
    Bei einem Array brauchst du nur den Speicher für die Daten.



  • Egal was irgendwo behauptet wird:
    Ein Zeiger ist kein Array.
    Ein Array ist kein Zeiger.
    Leute, die trotzdem davon ausgehen, sind selbst schuld.
    In diesem Fall gilt, dass Arrays nur unmodifizierbare Lvalues sind, und die lassen sich nun mal nicht modifizieren, in diesem Fall also nicht inkrementieren.



  • Ja stimmt wie dumm.. Wenn ich ja die Adresse des Arrays inkrementieren würde wüsste ich ja gar nicht mehr die Start Adresse vom ersten Element..
    Hab gar nicht so weit gedacht.

    Danke an alle und einen Schönen Sonntag ! 🙂


Anmelden zum Antworten