Frage: Die undefinierte Größe von „void“ verstehen
In der C-Programmierung steht das Schlüsselwort „void“ für das Fehlen eines Typs. Dies wirft die Frage auf: Wie groß ist „void“?
Antwort:
Der Typ „void“ hat in C keine definierte Größe. Es handelt sich nicht um einen Ein gültiger Typ für Objekte oder Zeiger. Der Versuch, ihn als solchen zu verwenden, würde daher zu einem Kompilierungsfehler führen. Insbesondere ist die Anweisung:
void n;
ungültig, da versucht wird, eine Variable vom Typ „void“ zu deklarieren, was nicht zulässig ist.
Erweiterung: Zuordnung und Zeigerarithmetik mit „ void"-Zeiger
Obwohl „void" keine Größe hat, kann es als Typ für Zeiger verwendet werden. Solche Zeiger verweisen jedoch nicht auf einen bestimmten Datentyp oder eine bestimmte Datengröße.
Die Anweisung:
void *p = malloc(sizeof(void));
führt zu einem Fehler bei der Kompilierung, da versucht wird, Speicher für eine „void“ zu reservieren „ Typ ist unsinnig. Die Funktion malloc erfordert einen gültigen Datentyp, um Speicher zuzuweisen.
In GCC wird der Ausdruck sizeof(void) überraschenderweise als 1 ausgewertet. Auch wenn dies so aussehen mag, als würde es „void“ eine Größe zuweisen, ist dies lediglich der Fall ein Implementierungsdetail, auf das man sich nicht verlassen sollte.
Außerdem ist die Zeigerarithmetik p auf einem „void“-Zeiger undefiniert und sollte nicht verwendet werden. Dies liegt daran, dass der Datentyp, auf den p zeigt, unbekannt ist, sodass nicht bestimmt werden kann, was eine Erhöhung des Zeigers bedeuten würde.
Das obige ist der detaillierte Inhalt vonWie groß ist „void' in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!