Zeichnen Sie in Gedanken eine Linie durch den Asterik. Auf der linken Seite ist, was auf und nach rechts gezeigt wird, welche Art von Zeiger
Zum Beispiel
const char * const p
- Der Zeiger p
ist konstant und ebenso die Zeichen, auf die p
zeigt - d. h. der Zeiger und der Inhalt können nicht geändert werden, auf den p
auf const char * p
- p
zeigt auf konstante Zeichen. Sie können den Wert von p
ändern und dafür sorgen, dass er auf verschiedene konstante Zeichen zeigt. Aber was auch immer p
zeigt, Sie können den Inhalt nicht ändern. char * const p
- Sie können den Zeiger nicht ändern, aber den Inhalt ändern und schließlich
char * p
- Alles ist zu vergeben Ich hoffe, das hilft.
Alle sind gültige Anweisungen, da Sie sie nicht dereferenzieren, weil alle Zeiger nicht oder nicht auf gültige Speicherstellen verweisen.
Und sie sind gültig, weil der Zeiger nicht konstant ist, sondern der Wert, auf den der Zeiger zeigt, konstant ist. So können Zeiger hier neu zugewiesen werden, um auf einen anderen Ort zu zeigen.
Diese Zuweisungen sind alle perfekt gültig, wie ich und andere in Ihrem letzten Lauf fast identischer Fragen erklärt haben.
A const char*
ist ein Zeiger auf Speicher, der nicht mit diesem Zeiger geändert werden kann. Nichts kann das umgehen. Der Compiler würde einwenden, wenn du c4 = c1
seit dem zugewiesen hast, was die const umgehen würde.