c: Größe der Lücke *
Ich bin ein bisschen verwirrt, mit einem void* - Zeiger in C. vor Allem nach dem Lesen dieser Frage: Ist die sizeof(einige Zeiger) immer gleich vier?wo eine person sagt, es gibt keine Garantie, dass sizeof(int *) == sizeof(double *)
Meine Frage ist: gibt es eine Garantie von sizeof(void*) >= sizeof(alle anderen Zeiger-Typ)?
In anderen Worten, kann ich immer ordnen Sie ein some_type* Zeiger auf einen void* - Zeiger, und dann Holen Sie es zurück, als some_type*?
InformationsquelleAutor der Frage facha | 2011-08-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur Daten Zeiger.
void *
können, halten Sie eine beliebige Daten-Zeiger, aber keine Funktionszeiger.Hier ist ein C FAQ.
Als für den ersten Teil, ja, verschiedene Typen haben kann Zeiger in verschiedenen Größen:
InformationsquelleAutor der Antwort cnicutar
Ist der Wert gespeichert, der Zeiger ist eine Adresse in den Speicher. Wenn Sie auf einem 32-bit system, dass die Zeiger in den Speicher wird mit 32 bit (oder vier bytes) lang. Wenn Sie auf einem 64-bit system, dass die Zeiger in den Speicher wird in 64-bit (acht Byte) lang.
Die Größe der Daten, hält die Lage im Speicher hat nichts zu tun mit der Größe der Daten dargestellt, die an dieser Stelle im Speicher.
Als für wie ein
char *
unterscheidet sich von einemdouble *
diechar *
zeigen können, an jedem Ort, aber diedouble *
muss etwas zeigen entlang eines acht-byte-Grenze. Größere Daten werden ausgerichtet nach den Regeln des Prozessors, die Sie sind auf. So, Zeiger, kleine Daten sind im Allgemeinen nicht kompatibel mit Zeigern auf große Daten (z.B. sollte man nicht Punkt adouble *
Zeiger auf einechar *
- Adresse); aber du bist speichern in der anderen Richtung (z.B. können Sie einchar *
Zeiger auf einedouble *
- Adresse).InformationsquelleAutor der Antwort unpythonic