Array-Zeiger kopieren



  • Warum geht dass nicht? Das Programm bricht einfach ab:

    int main()
    {
        int array[5] = {13,42,25,2,3};
        int *p1 = array;
        int *p2 = new int[5];
    
        while(p1 != p1+5)
        {
            *p2 = *p1;
            ++p1;
            ++p2;
        }
    
        for(size_t i=0; i < 5; ++i)
        {
            cout << p2[i] << endl;
        }
    
        return 0;
    }
    

    MfG
    Stromberg



  • Du hast p2 schon vorgesetzt und greifst dann in der for-Schleife nochmal auf spätere Elemente zu, das is nich gut 🙂



  • Mh, stimmt. Aber so gehts leider auch nicht:

    int main()
    {
        int array[5] = {13,42,25,2,3};
        int *p1 = array;
        int *p2 = new int[5];
    
        while(p1 != p1+5)
        {
            *p2 = *p1;
            ++p1;
            ++p2;
        }
    
        p2 = p2 - 5; //so?
    
        for(size_t i=0; i < 5; ++i)
        {
            cout << p2[i] << endl;
        }
    
        return 0;
    }
    

    Oder ist "p2 - 5" nicht dass gleiche wie 5 mal "--p2"?

    MfG
    Stromberg



  • Stromberg schrieb:

    Mh, stimmt. Aber so gehts leider auch nicht:

    // ...
        while(p1 != p1+5)
        // ...
    

    Dieser Zeile würde ich besondere Beachtung schenken.



  • Ich weiss nicht mal was du mit deinem Programm bezwecken willst. Aber wie "Mitleid" schon meinte, wie kamst du auf die Idee, bzw. ich hoffe du hast dich verschrieben, dass p1 irgendwann mal das gleiche wie p1 + 5 sein kann. Du kannst den Wert von p1 hochsetzen wie du willst, p1 + 5 wird IMMER um 5 größer sein 😃



  • Ah, is klar, war totaler schmarren was ich gemacht habe.

    So gehts natürlich:

    int main()
    {
        int array[5] = {13,42,25,2,3};
        int *p1 = array;
        int *p2 = new int[5];
    
        while(p1 != array+5)
        {
            *p2 = *p1;
            ++p1;
            ++p2;
        }
    
        p2 = p2 - 5; 
    
        for(size_t i=0; i < 5; ++i)
        {
            cout << p2[i] << endl;
        }
    
        return 0;
    }
    

    War schon zu spät für mich glaub ich.
    Danke für eure Hilfe.

    MfG
    Stromberg


Anmelden zum Antworten