Zeiger konvertieren: Warum Einschränkungen bei Zeiger-zu-Zeiger-Konvertierungen?
In C ist es im Allgemeinen zulässig, einen Zeiger auf einen Nicht-Zeiger umzuwandeln -const-Typ auf einen Zeiger auf einen const-Typ. Dies folgt dem Prinzip der „Konstantenkorrektheit“, sodass nur konstante Daten geändert werden können.
Allerdings tritt eine besondere Ausnahme auf, wenn es um Zeiger auf Zeiger geht. Im Gegensatz zur oben genannten Konvertierung ist es verboten, einen „Zeiger auf Zeiger auf Nicht-Konstante“ in einen „Zeiger auf Zeiger auf Konstante“ umzuwandeln.
Bedenken Sie diesen Codeausschnitt:
char *s1 = 0; const char *s2 = s1; // OK... char *a[MAX]; // aka char ** const char **ps = a; // error!
Warum Ist die Zuordnung von a zu ps illegal? Die Antwort liegt im Standard:
const char c = 'c'; char* pc; const char** pcc = &pc; // not allowed *pcc = &c; *pc = 'C'; // would allow to modify a const object
In diesem Beispiel:
Wenn diese Konvertierung zulässig wäre, würde sie Änderungen an konstanten Objekten ermöglichen. Beispielsweise würde *pcc auf ein Konstantenzeichen verweisen, *pc wäre jedoch änderbar. Dies verstößt gegen die Prämisse der Konstantenkorrektheit, da es möglicherweise Änderungen an konstanten Daten zulässt.
Daher ergibt sich die Einschränkung bei der Konvertierung eines Zeigers von einem Zeiger auf eine Nichtkonstante in einen Zeiger von einem Zeiger zu einer Konstante aus der Notwendigkeit, dies zu tun Behalten Sie die Integrität konstanter Objekte bei und verhindern Sie unbeabsichtigte Datenänderungen.
Das obige ist der detaillierte Inhalt vonWarum kann ich in C einen Pointer-to-Pointer nicht in Non-Const in einen Pointer-to-Pointer in Const umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!