This Zeiger (Überhaupt Zeiger)



  • Hallo,

    Storm.Xapek.de schrieb:

    Zeiger gehören(auser dem this- zeiger) auch mehr zu C (nicht ausschließlich) in C++ verwendet man mehr Referenzen.

    Na ja, ist stark situationsabhänig. Dynamischen Speicher kann ich z.B. über Referenzen nicht allokieren, und eine Referenz kann ich nicht versetzen. Aber für Parameter sind const-Referenzen sicherlich eine gute Wahl.

    Aber eigentlich ist ein Zeiger einfach nur die gespeicherte Adresse einer Variblen. Such am besten mal ein Tutorial darüber gibs bestimmt was. Ansonsten frag im Ansi-C forum.

    Oder lies den Zeiger-Artikel: http://www.c-plusplus.net/forum/viewtopic-var-t-is-124532.html

    Mfg

    GPC



  • Also ich habe jetzt so viel verstanden, das ein Zeiger immer auf den speicherplatz eines feldes im Arbeitsspeicher zeigt.
    wenn der Zeiger den wert NULL hat, wird nichts angezeigt.
    Aber wenn er den wert 1 hat, gibt er auch 1 zurück.
    Aber was habe ich denn dann davon.
    Das heist doch eigendlich, das er immer den wert einer variable wiedergibt, die ich schon mal genutzt habe.
    Und wenn ich sie doch schon mal genutzt habe, dann kann ich sie doch wieder verwenden. Wofür brauche ich dann den zeiger.

    Und genau das ist mein problem.
    Und wieso muss ich einem zeiger einen wert geben, wenn die größe doch so wie so vom system abhängig ist. ob ich int oder char nehme ist ja dann völlig egal.
    normal nimt man ja den mit den kleinsten bits. dann kann ich ja double long int nehmen, damit ich bei werten immer ein bischen spielraum habe. das prog wird ja dann nicht kompackter. Und variablen nutzen wäre ja dann überflüssig.

    Das verstehe ich jetzt eben nicht.

    MFG Sqwan 🙂 <-- Zuversicht



  • Die Zeiger sind immer gelich groß
    Der Typ des Zeigers ist damit man weiß wie groß der Wert auf den der Zeiger zeigt ist. Zeiger benutzt man hauptsächlich um in Funktionen direkt die Variabel verändern zu können und nicht mit Kopien von den WErten arbeiten muss



  • Das heist ja, das ich nie Zeiger brauche, wenn ich immer neue variablen nutze, oder sie einfach überschreibe. Nur wird dann das programm was rauskommt auch größer?
    ich meine wenn ich Variablen einfach überschreibe?

    MFG Sqwan



  • .oO

    @Sqwan

    bleib im c++ forum ..

    du allozierst später speicher in einem anderen bereich als auf dem "stack"(speicherbereich, auf dem du jetzt grad wahrscheinlich noch arbeitest) über ... natürlich: zeiger.
    der bereich heißt freispeicher (manche sagen auch heap, das c pendant), und dort gibt es nur adressen (was hervorragend zu zeigern passt 😉 ), also eine variable mit namen x kann dort nicht angelegt werden.
    vorteil: viel mehr platz, und dazu noch: du kannst zur laufzeit speicher anfordern und freigeben.

    alles ein wenig verkürzt und nur skizziert, les dir ein gutes buch oder tutorial durch 🙂 (schlagwort: new und delete)



  • Zeiger haben als Inhalt eine Speicheraddresse und nicht die Variable auf die sie zeigen, man benutzt sie hauptsächlich als Übergabeparameter von Funktionen um Werte die ausserhalb der Funktion liegen zu verändern, da in C++ Werte meist als Kopie übergeben werden. Wenn du also eine Funktion hättest und würdest in dieser Funktion den übergeben Wert ändern und den Wert ausserhalb der Funktion wieder abrufen hättest du immer noch den selben Wert wie vor der Funktion. Bsp.:

    //nicht getestet
    #include <iostream>
    
    using namespace std;
    
    void funktion(int variable) {
        variable = 5; }
    
    int main() {
      int variable = 3; 
      funktion(variable);
      cout << "Wert der Variablen" << variable; //hier würde 3 stehen, obwohl du 
                                                //in der Funktion der Variablen 
                                                //den Wert 5 geben wolltest!!
      return 0;
    }
    

    Du hättest mit diesem Code nur eine Kopie der Variablen verändert, die nur in der Funktion gültig ist. Mit diesem Code würdest du die Variable selbst verändern:

    #include <iostream>
    
    using namespace std;
    
    void funktion(int * variable) {
       *variable = 5; }
    
    int main() {
       int variable = 3;
       int * zeiger = &variable; //Zeiger die Speicheraddresse von variable geben
       funktion(zeiger);
       cout << "Wert der Variable" << variable; //jetzt kommt 5
       return 0;
    }
    

    MfG Jaschi



  • Dankeschön.
    Das konnte ich brauchen.
    Das heist dann aber, das ich die Variable zurückveränden muss, wenn ich sie erstmal verändert habe. Weil dann ist sie ganz verändert, und nicht nur einmalig überschrieben.
    Und hätte das denn keinen vorteil, wenn ich einfach ne neue variable nehme anstadt einen zeiger zu benutzen, weil dann kann ich den quellcode ja kleiner halten und übersichtlicher. Weil man verliert doch irgendwann den überblick wenn man variablen immer neue werte gibt. Oder liege ich da falsch?



  • Es geht doch drum den Variablen neue Werte zu geben. Wenn du die Variable nur als Kopie übergeben willst übergibst du sie als Kopie und wenn du sie in der Funktion verändern willst nimmst du Zeiger.



  • Ja.Das habe ich ja verstanden.
    Aber behält die variable den wert den sie vom Zeiger bekommen hat, auch wenn die funktion nicht mehr activ ist, oder is es dann wieder die alte?



  • Das ist doch gerade der Unterschied. Die Variable bleibt verändert auch wenn die Funktion nicht mehr läuft.


Anmelden zum Antworten