code verständisproblem



  • hallo,

    ich weiß was der code macht nur eine zeile verstehe ich nicht.

    int main ()
    {
    int arr1[5] = {1,2,3,4,5,};
    size_t sz = sizeof(arr1)/sizeof(*arr1);
    int *source = arr1;
    int *dest = new int[sz];
    while (source != arr1+sz)
    {
    	*dest++ = *source++;
    }
    

    was macht dieser code

    while (source != arr1+sz)
    

    source und arr1 geben doch nur die adresse aus , jedenfalls tun sie das wenn ich cout << arr1<<source; Was soll es bringen 2 adressen zu vergleichen ?



  • Die daten von arr1 fangen an der adresse arr1 an
    Und wenn du darauf size addierst hast du die "Endadresse"
    Dann wird mit der Endadresse verglichen um zu sehen, ob man am Ende ist.

    Hoffe, dass das verständlich war 🙂


  • Mod

    kantaki schrieb:

    source und arr1 geben doch nur die adresse aus , jedenfalls tun sie das wenn ich cout << arr1<<source; Was soll es bringen 2 adressen zu vergleichen ?

    Das ist um festzustellen, ob man am Ende des Array ist. source zeigt am Anfang auf den Anfang 😉 und wird in jedem Durchlauf erhöht. arr1 ist der Anfang des Arrays, sz, die Größe und arr1 + sz daher das Ende.

    Und das ganze ist nicht sonderlich lesbar. Vermutlich dachte der Programmierer, dass er ein ganz schlauer wäre und irgendetwas optimiert, aber es ist bloß unlesbar.



  • oh mann 😞
    das hätte ich eigentlich auch selber wissen müssen...

    danke 🙂


Log in to reply