Wie groß ist ein Zeiger?
Ist die Größe eines Zeigers, der gleichen Größe wie der Typ seine zeigen auf, oder haben die Zeiger immer eine Feste Größe haben? Zum Beispiel...
int x = 10;
int * xPtr = &x;
char y = 'a';
char * yPtr = &y;
std::cout << sizeof(x) << "\n";
std::cout << sizeof(xPtr) << "\n";
std::cout << sizeof(y) << "\n";
std::cout << sizeof(yPtr) << "\n";
Was würde der Ausgang von diesem sein? Würde sizeof(xPtr)
zurück 4 und sizeof(yPtr)
1 zurück, oder würden die 2 Zeiger tatsächlich zurück die gleiche Größe? Der Grund, warum ich Frage, ist weil die Zeiger speichern eine memory-Adresse und nicht die Werte der jeweiligen gespeicherten Adressen.
InformationsquelleAutor der Frage MGZero | 2011-07-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zeiger haben in der Regel eine Feste Größe, für die ex. auf einem 32-bit-Programm Sie sind in der Regel 32-bit. Es gibt einige Ausnahmen, wie Sie auch auf alte 16-bit-windows, wenn Sie hatte zu unterscheiden zwischen 32-bit-Zeiger und 16-bit... Es ist in der Regel ziemlich sicher davon ausgehen, Sie gehen zu werden einheitlich innerhalb einer bestimmten ausführbaren Datei, die auf modernen desktop-OS ist.
Edit: Auch so, ich würde dringend Vorsicht gegen das machen dieser Annahme in Ihrem code. Wenn du gehst, etwas zu schreiben, absolut hat einen Zeiger, der eine bestimmte Größe, die Sie besser überprüfen Sie es!
Funktion Zeiger sind eine andere Geschichte-siehe Jens' Antwort für mehr info.
InformationsquelleAutor der Antwort Nathan Monteleone
Funktion Zeiger können sehr unterschiedliche Größen, von 4 auf 20 Bytes auf einer X86-Maschine, je nach compiler. Die Antwort ist also NEIN - die Größen können variieren.
Anderes Beispiel: nehmen Sie ein 8051-Programm, es hat drei Speicherbereiche und hat somit drei verschiedene Zeiger Größen, von 8-bit, 16bit, 24bit, je nachdem, wo das Ziel liegt, auch wenn das Ziel die Größe ist immer gleich (z.B. char).
InformationsquelleAutor der Antwort Jens
Auf 32-bit-Maschine sizeof Zeiger 32 bit ( 4 Byte), während auf 64-bit-Maschine sind es 8 byte. Unabhängig davon, welchen Datentyp Sie zeigen, Sie haben Feste Größe.
InformationsquelleAutor der Antwort peeyush
Zeiger sind nicht immer der gleichen Größe auf der gleichen Architektur.
Lesen Sie mehr über das Konzept von "nah", "weit" und "große" Zeiger, nur so als Beispiel von einem Fall, in dem Zeiger Größen unterscheiden...
http://en.wikipedia.org/wiki/Intel_Memory_Model#Pointer_sizes
InformationsquelleAutor der Antwort Soumajyoti
Zur Beantwortung Ihrer anderen Frage. Die Größe des Zeigers und die Größe, was es Punkte, sind nicht miteinander verwandt. Eine gute Analogie ist, um Sie zu betrachten, wie postalische Adressen. Die Größe der Adresse eines Hauses hat keine Beziehung zu der Größe des Hauses.
InformationsquelleAutor der Antwort Jay
Können Sie anders sein auf Wort-adressierbare-Maschinen (z.B. Cray PVP-Systeme).
Meisten Computer heute sind byte-adressierbar-Maschinen, wo jede Adresse bezieht sich auf ein byte des Speichers. Es werden alle Daten, die Zeiger sind in der Regel die gleiche Größe, nämlich die Größe der Maschine-Adresse.
Auf Wort-adressierbar Maschinen, jede Maschine, die Adresse bezieht sich stattdessen auf ein Wort, die größer als ein byte. Auf diese, (char *) oder (void *) Zeiger auf ein byte Speicher enthalten sowohl die Wort-Adresse: byte-offset innerhalb des addresed Wort.
http://docs.cray.com/books/004-2179-001/html-004-2179-001/rvc5mrwh.html
InformationsquelleAutor der Antwort Markus Kuhn
Die Größe eines Zeigers ist die Größe von Ihrem system benötigt, um halten Sie einen einzigartigen Speicher-Adresse (da ein pointer nur hält der Adresse Punkte)
InformationsquelleAutor der Antwort J T