Heim > Backend-Entwicklung > C++ > Warum kann ich in C einen Pointer-to-Pointer nicht in Non-Const in einen Pointer-to-Pointer in Const umwandeln?

Warum kann ich in C einen Pointer-to-Pointer nicht in Non-Const in einen Pointer-to-Pointer in Const umwandeln?

Susan Sarandon
Freigeben: 2025-01-01 02:42:09
Original
490 Leute haben es durchsucht

Why Can't I Convert a Pointer-to-Pointer to Non-Const to a Pointer-to-Pointer to Const in C  ?

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!
Nach dem Login kopieren

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
Nach dem Login kopieren

In diesem Beispiel:

  1. c ist ein konstantes Zeichen.
  2. pc ist ein nicht konstanter Zeiger auf a Zeichen.
  3. Der Versuch, pcc (einen Zeiger auf einen Zeiger auf const) mit &pc zu initialisieren, ist nicht zulässig.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage