pointerfragen



  • Hallo ich bin neu in diesen community...
    ich hab auch gleich mal 2 fragen zu pointern

    int x[5], *ptr,i;
    
      for(ptr = x, i=1; ptr < &x[6]; ptr++,i++)
        *ptr = i; 
    
      for(ptr = x; ptr < &x[6]; ptr++)
        cout<< *ptr << endl;
    

    warum füllt er den eigentlichen array von 5 elementen mit 6 ? bzw. warum ist dies möglich "über" den speicher zu füllen?

    und gleich meine zweite frage... wie kann ich per zeigerarithmetik einen dreieckstausch per bubblesort realisieren?
    vielen dank schonmal für eure antworten



  • ACidernie schrieb:

    Hallo ich bin neu in diesen community...
    ich hab auch gleich mal 2 fragen zu pointern

    int x[5], *ptr,i;
      
      for(ptr = x, i=1; ptr < &x[6]; ptr++,i++)
        *ptr = i; 
        
      for(ptr = x; ptr < &x[6]; ptr++)
        cout<< *ptr << endl;
    

    warum füllt er den eigentlichen array von 5 elementen mit 6 ? bzw. warum ist dies möglich "über" den speicher zu füllen?

    In deinem Obigen Code schreibst du wie gesagt über die Grenzen deines Arrays. Machen kannst du das schon, wenn du Interesse daran hast, sowas wie ein Glückspiel zu spielen ("Stürzt das Programm diesmal ab oder nicht?") ;).
    Du solltest es dir aber auf keinen Fall zur Regel machen, da du aus Speicher liest und in Speicher schreibst, der dir nicht gehört!

    und gleich meine zweite frage... wie kann ich per zeigerarithmetik einen dreieckstausch per bubblesort realisieren?
    vielen dank schonmal für eure antworten

    Weißt du wie du einen Bubble-Sort-Algo mit Arrays löst?
    Wenn ja, dann merke:

    Auf der Wertebene ist folgendes äquivalent: (Wenn i eine Ganzzahl)

    array[i]    *&array[i]      *(array + i)     *(ptr + i)      ptr[i]
    

    Auf Adressebene folgendes

    &array[i]   array + i     ptr + i
    

    Das sollte dir weiterhelfen.

    Caipi



  • mhm aber ich führ die schleife doch nur aus bis zur letzten adresse

    ptr < &x[6];
    

    oder irre ich mich da Oo ich mein sonst hab ich das auch immer so realisiert glaub ich =p

    werds mal versuchen mit deinem tipp unten
    vielen dank

    hab gleich noch ne zusatzfrage...
    wie kann ich mit einem pointer auf eine stelle eines stringsarrays zugreifen... also:

    string *ptr, name[2];
    
      ptr = name;
    
      name[0] = "Peter";
      name[1] = "Hans";
    
      cout << name[0][1]; // < das bräuchte ich als pointervariante ?!?
    


  • ACidernie schrieb:

    mhm aber ich führ die schleife doch nur aus bis zur letzten adresse

    ptr < &x[6];
    

    oder irre ich mich da Oo ich mein sonst hab ich das auch immer so realisiert glaub ich =p

    Bedenke dass man in C++ bei 0 anfängt zu zählen. D.h ein array

    int arr[5];
    

    Sprichst du über den Index 0 bis 4 an. Deswegen sollte die Abruchbedingung in deiner Schleife ptr < &x[5]; lauten.

    hab gleich noch ne zusatzfrage...
    wie kann ich mit einem pointer auf eine stelle eines stringsarrays zugreifen... also:

    string *ptr, name[2];
    
      ptr = name;
      
      name[0] = "Peter";
      name[1] = "Hans";
    
      cout << name[0][1]; // < das bräuchte ich als pointervariante ?!?
    

    Z.B. so:

    int main()
    {
            string* ptr, name[2] = { "Hannes", "Heinz" };
            ptr = &name[0];
    
            cout << " ptr->at(1): " << ptr->at(1) << endl;
    }
    
    // Du kannst natürlich auch folgendes schreiben. (Beachte eventuell dazu
    // meinen ersten post)
    
    int main()
    {
            string* ptr, name[2] = { "Hannes", "Heinz" };
            ptr = &name[0];
    
            cout << " ptr[0][1]: " << ptr[0][1] << endl;
    }
    

    Caipi



  • hey, habs mit dem bubble sort trotz deiner hilfe leider immernoch nicht hinbekommen, ich kapier vorallem nicht wie der dreieckstausch aufgebaut werden soll

    könntet ihr mir vielleicht den quelltext posten wenns keine zu großen umstände macht?

    danke
    mfg Patrick



  • sag wenn dann bitte mal, wo es genau hängt. ich glaube nicht, dass dir jemand hier einen fertigen quelltext "serviert".



  • nunja bei bubble sort mit nem normalen array wär es ja beim dreieckstausch

    h= a[i];
    a[i] = a[i+1];
    a[i+1] = h;
    

    theoretisch gesehen hätte ich gedacht das es mit einem pointer der auf einen array zeigt dann so geht

    h= *ptr;
    *ptr = (*ptr++);
    (*ptr++) = h;
    

    aber dies geht ja nich, also ich weiß nich wie der dreieckstausch realisiert werden soll wenn ich es mit pointerarithmetik lösen soll

    -------------------------------------------------------
    okay hab die lösung gefunden, hab einfach nen zweiten Pointer auf den nachfolger gesetzt und den dann verglichen ^^


Anmelden zum Antworten