NULL-Zeiger für Referenzen dereferenzieren
Der C-Standard befasst sich explizit mit dem Verhalten der Dereferenzierung eines NULL-Zeigers, um eine Referenz zu erhalten. Diese Vorgehensweise wird als undefiniertes Verhalten betrachtet.
Im bereitgestellten Beispiel:
int* ptr = NULL; int& ref = *ptr; int* ptr2 = &ref;
Der Versuch, den NULL-Zeiger ptr zu dereferenzieren, wird als undefiniertes Verhalten betrachtet. Gemäß dem Standard (8.3.2/4 „Referenzen“):
Hinweis: Insbesondere kann eine Nullreferenz in einem wohldefinierten Programm nicht existieren, da dies die einzige Möglichkeit zum Erstellen ist Eine solche Referenz würde darin bestehen, sie an das „Objekt“ zu binden, das durch Dereferenzierung eines Nullzeigers erhalten wird, was zu undefiniertem Verhalten führt.
Daher wird dem Objekt eine Referenz zugewiesen Der dereferenzierte NULL-Zeiger ist ungültig und das Verhalten ist nicht genau definiert. Das Ergebnis der Verwendung von ptr2, das auf die vom dereferenzierten NULL-Zeiger erhaltene Referenz zeigt, ist ebenfalls undefiniert.
Eine Ausnahme vom Verbot der Dereferenzierung von NULL-Zeigern besteht bei Verwendung mit dem sizeof-Operator. In diesem Zusammenhang wird der Zeiger nicht tatsächlich ausgewertet, sodass seine Dereferenzierung kein undefiniertes Verhalten verursacht. Diese Ausnahme ist jedoch auf den sizeof-Operator beschränkt.
Das obige ist der detaillierte Inhalt vonWas passiert, wenn Sie einen NULL-Zeiger auf eine Referenz in C dereferenzieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!