Wie sieht das im Speicher aus?
-
Hallo, ich habe folgendes Programm:
#include <iostream> using namespace std; void main() { int ganz = 4711; int *pganz = &ganz; cout << pganz << endl; cout << &pganz << endl; cout << *pganz << endl; }Die Ausgaben sehen so aus:
0012FF7C // von mir umgerechnet 01245052 0012FF78 // 01245048 4711Wie kann ich mir das im Speicher vorstellen? Da gibt es ja einen Pointer und eine Referenz. Was ist der Anfang und was das Ende im Speicher? Also welche Adresse gibt denn nun letzendlich was an? Ich bin für Hilfe sehr dankbar.
-
1. gibt die Adresse von ganz an. Ein Pointer speichert die Adresse, auf die er zeigt. Also gibt er die auch aus, wenn man ihn ohne Operator anspricht.
2. gibt die Adresse von pganz an. Da auch Pointer Variablen sind haben sie natürlich auch Adressen. Mit & kommt man an die Adresse einer Variable.
3. gibt den Inhalt von ganz aus. Der * Operator sucht sich die Variablen an der Adresse, auf die pganz zeigt und gibt deren Inhalt zurück.
geloescht
-
Achso! Also ist das Zweite die Adresse des Pointers! Nur noch so als Frage: Für jede Adresse(z.b. hier 0012FF78) wird doch immer einheitlich soviel platz wie für eden entsprechenden typ der variable reserviert, oder?
Würde das heißen dass auf der Adresse 0012FF78 in dem Falle 2 Byte reserviert sind(ist ja int)?
-
Wie groß ein Variablentyp ist, ist in C++ Plattformabhängig. Auf 32-Bit Systemen hat es oft eine größe 4 Byte (muss aber auch da nicht unbedingt der Fall sein). Wie groß ein Typ (Byte) ist, kannst du mit sizeof() ermitteln.
-
wobei gilt sizeof(char) = 1; char muss allerdings nicht unbedingt 8 bit haben.
-
Kartoffelknolle schrieb:
Achso! Also ist das Zweite die Adresse des Pointers! Nur noch so als Frage: Für jede Adresse(z.b. hier 0012FF78) wird doch immer einheitlich soviel platz wie für eden entsprechenden typ der variable reserviert, oder?
Nein, zusätzlichen Speicher kannst du mit dem new-Operator reservieren. Ein Zeiger kann immer nur entweder auf ein existierendes Objekt (global, lokal ...) oder aber auf Speicher, der von new kommt, zeigen. (es gibt auch andere Allokationsfunktionen, aber das wird jetzt zu verwirrend)
Würde das heißen dass auf der Adresse 0012FF78 in dem Falle 2 Byte reserviert sind(ist ja int)?
Ja schon, da liegt ja die Stack-Variable 'pganz'.