Wozu braucht man eigentlich genau Pointer??



  • Hallo,
    ich les mir grad den C++ Kurs (http://www.cpp-tutor.de/cpp) durch.

    Wurde mir in nem älteren Beitrag empfohlen (dafür nocheinmal DANKE 👍 )

    So nun aber meine Frage:

    Ich bin bisher ohne Probleme bis zum Kapitel 4 gekommen! Dann kamen die Pointer 😮

    Schön und gut:
    Mit pointern kann man auf die Adresse von Variablen verweisen, soweit hab ichs noch... 😃

    Aber was bringt mir jetzt das Ganze??
    nen KLEINES 😃 Beispielprogramm wäre nett!?
    grüße



  • lies mal weiter bis irgendwann oder in einem anderen tutorial der begriff "freispeicher" oder "heap" kommt.

    darüber hinaus schau dir die idee von prozeduren in den jeweiligen tutorials an, die bleibend auf mehreren werten arbeiten.



  • mal angenommen du möchtest das deine Funktion eine integer zahl hochzählt:

    hochzaehlfunktion (int ZahlZumHochZaehlen)
    {
    ZahlZumHochZaehlen
    }
    
    main()
    {
     int Zahl = 5;
     hochzaehlfunktion(Zahl); 
     /* In diesem Fall wird an die Funktion eine Kopie des Inhaltes übergeben und diese 
     Kopie wird hochgezählt, deine Original Variable bleibt unverändert. Würdest du hier einen Pointer übergeben, hättest du die Adresse des Original Inhaltes und könntest diesen hochzählen.
    
    }
    

    Dazu kannst du mal nach tiefer und flacher Kopie bzw. deep and shallow Copy suchen.

    Pointer ermöglich auch das dynamische erstellen von Variablen.

    Vor- und Nachteile von Pointern findest du hier:
    http://de.wikipedia.org/wiki/Zeiger_(Informatik)#Vorteile
    (Du musst die URL Kopieren, und in die Adressleiste einfügen um auf den Link zu kommen.)

    Gruß Hubibi



  • Cool 🕶

    Dann werd ich das Thema mal als wichtig in meiner Rübe abspeichern 😃

    Vielen Dank! 👍

    PS:
    Dein Prog werd ich natürlich gleich mit Pointern versuchen, mal sehen ob ichs gebacken krieg 🙄
    grüße



  • Hm, nagut, anscheinend hab ichs doch noch nicht so ganz geblickt 😮

    Hier mal mein Versuch:

    #include <iostream.h>
    
    hochzaehlfunktion (int ZahlZumHochZaehlen)
    {
    	for (int i=1; i<3; i++) {
    		ZahlZumHochZaehlen+=ZahlZumHochZaehlen;
    		cout << ZahlZumHochZaehlen << endl;
    	}
    return ZahlZumHochZaehlen;
    }
    
    main(){
    	int *pvar;
    	int var = 5;
    
    	pvar = &var;
    
     hochzaehlfunktion(*pvar);
    
     cout << *pvar << endl;
    
     return 0;
    }
    

    Ich dacht eigentlich dass durch den Pointer nun *pvar auch hochgezählt wird so dass der compiler folgendes ausgibt:
    10
    20
    20

    leider gibt der aber
    10
    20
    5
    aus

    was hab ich falsch gemacht??

    güße



  • Ich mach's mal anhand einem Swap, dann wird's augenfälliger.
    Schau dir mal an, wie ich die Variablen übergebe.

    #include <iostream>
    using std::cout;
    using std::endl;
    
    void swap(int* lhs, int* rhs) {
      static int tmp = 0;
      tmp = *lhs;
      *lhs = *rhs;
      *rhs = tmp;
    }
    
    void ausgabe(int a, int b) {
      cout << a << b << endl;
    }
    
    int main() {
      int a = 5;
      int b = 7;
      ausgabe(a, b); // 5 7
      swap(&a, &b);
      ausgabe(a, b); // 7 5
      return 0;
    }
    

    Und das swap könnte man jetzt auch schön generisch machen ..
    So in etwa.. Muss jetzt nicht hunderpro passen ...

    bool swap(void* lhs, void* rhs, size_t size) {
      if((lhs == 0) || (rhs == 0) || (size == 0))
        return false;
      static void* tmp = 0;
      tmp = malloc(size_t);
      if(tmp == 0)
        return false;
    
      memcpy(tmp, lhs, size);
      memcpy(lhs, rhs, size);
      memcpy(rhs, tmp, size);
      free(tmp);
      return true;
    }
    


  • Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • @Admin: Sorry 😃

    Ok, ich hab versucht den Code zu verstehen, aber dafür bin ich doch noch ein zu großer Anfänger 😮 😕 😮

    Deshalb erstmal danke, ich werd mir den Code abspeichern und werd mich jetzt ertmal wieder den Tutorials widmen, hoffe ich hab bald genug Grundwissen.

    Gruß mercer


Anmelden zum Antworten