Zeiger und Variable



  • Hallo Freunde,
    nach einer langen Pause, die ich der stressenden Schule zu verdanken habe, warten nun bald die Sommerferien auf mich und ich kann mich endlich wieder der Programmierung widmen.

    Da ich erstmal wieder "reinkommen" muss, werde ich demnächst wieder meine C++ Lektüre in die Hand nehmen und darin lesen. Gerade bin ich über einen Satz gestolpert, den ich euch gerne mal zeigen möchte.

    "EIne Variable ist ein Zeiger auf eine Stelle im Speicher."

    Das ist irgendwie einleuchtend, doch hier ist der Zeiger nicht mit einem "normalen" C++ Zeiger zu vergleichen, oder? Ein C++ Zeiger ist immerhin eine Variable, die die Adresse einer anderen speichert. Ich finde das irgendwie missverständlich.

    Tue ich mich nur schwer oder was sagt ihr dazu?

    Vielen Dank
    lg, freakC++



  • Ist schlecht formuliert. Stell dir Variablen lieber als Platzhalter vor. Diese Platzhalter sind irgendwo im Speicher und repräsentieren einen Wert.



  • Eine Variable ist schlussendlich ja eine Adresse im Speicher. Also irgendwie sowas: 0x12fa4332. Und dort ist dann der Wert gespeichert (bei einem int z.B eine Zahl).
    Ein Zeiger ist eigentlich nichts anderes, als das, aber er speichet jetzt nicht eine Zahl, sondern eine Adresse (ist ja auch wieder einfach eine Zahl, wird aber anders interpretiert).

    Der Unterschied ist dann ja klar (und genau das, was man programmiertechnisch oft macht). Man braucht nicht bereits zur Kompilierungszeit (wo Variablen mit Namen angesprochen werden können) die Adresse, sondern kann diese zur Laufzeit füllen und dann darauf zugreifen (mit dem -> Operator).

    Ist wahrscheinlich mehr erklärt, als nötig, aber der Satz mach schon Sinn. Aber ist wahrscheinlich schon ein wenig missverständlich.



  • Ok, super! So sehe ich das nämlich auch.

    Vielen Dank
    lg, freakC++



  • Ich möchte das mit einer Zeile Code beantworten:

    register int x;
    

    Es ist zwar richtig, dass Variablen meistens irgendwo im Speicher liegen, aber das ist mitnichten zwingend.



  • Hallo,
    das ist ein gutes Beispiel. Du musst jedoch darauf achten, dass das register nur eine Bitte an den Compiler ist und nicht automatisch bedeutet, dass die Variable im CPU Register landet. Das hat ganz alleine die CPU zu entscheiden.

    lg, freakC++



  • Ein ordentlicher Compiler kann auch Variablen und ganze Berechnungen wegoptimieren. Da passt die Definition auch nicht mehr sonderlich gut.

    freakC++ schrieb:

    Du musst jedoch darauf achten, dass das register nur eine Bitte an den Compiler ist und nicht automatisch bedeutet, dass die Variable im CPU Register landet. Das hat ganz alleine die CPU zu entscheiden.

    Es wird schon vom Maschinenprogramm bestimmt welche Werte in welchen Registern landen. Damit liegt es in der Entscheidung des Compilers. Es stimmt aber schon, dass das register Keyword nur ein Hinweis für den Compiler ist, und von diesem auch einfach ignoriert werden kann.


Anmelden zum Antworten