Was ist der Unterschied zwischen Const*char und Const Char*?

2 Antworten


  • Es gibt kein "const * char". Es wird nicht kompiliert. Ich denke, was Sie meinten, ist "char * const" im Gegensatz zu "const char *".

    Sie sind völlig unterschiedlich.

    char * const p1;

    deklariert einen konstanten Zeiger, über den Sie sowohl lesend als auch schreibend auf ein char zugreifen können. Aber der Zeiger selbst ist eine Konstante und Sie können ihn NICHT ändern. Wie alle anderen konstanten Variablen müssen Sie sie bei der Deklaration gleichzeitig mit einem konstanten Wert initialisieren. Sie dürfen es später im Code nicht einstellen.

    const char * p2;

    deklariert einen Zeiger, über den Sie möglicherweise auf ein char zugreifen können, aber Sie können es über den genannten Zeiger nicht ändern. Aber der Zeiger selbst kann geändert werden.

    Bitte beachten Sie, dass es einen Mythos gibt, dass viele Leute, darunter einige mit mehreren Jahrzehnten Programmiererfahrung, denken, dass "const char *" einen Zeiger auf ein konstantes char bedeutet. Das ist völlig falsch. "const char *" bedeutet nur, dass das char nicht mit dem Pointer verändert werden kann. Es kann durchaus ein reguläres, veränderbares Zeichen sein, das durch andere Mittel oder andere Zeiger veränderbar ist. Es ist nur so, dass der Compiler Ihnen NICHT erlauben würde, diese Zeichenrichtung durch den const char-Zeiger zu ändern.

    Ein echter const char ist überhaupt nicht veränderbar, egal wie Sie es versuchen. Ein echtes const char kann entweder im schreibgeschützten Speicher abgelegt werden, sodass es physikalisch einfach unmöglich ist, es zur Laufzeit zu ändern. Oder es kann überhaupt kein Speicherplatz zugewiesen und direkt dort verwendet werden, wo auf das const-Zeichen verwiesen wird. In diesem letzteren Fall gibt es sicherlich keine Möglichkeit, überhaupt einen Zeiger abzuleiten, der auf das char zeigt, da er keinen Speicherplatz belegt.

    Denken Sie also daran, dass "const char *" KEIN "Zeiger auf ein konstantes char" ist.

    Was ist mit "const char[]". Das ist anders als "const char*". Im Fall "const char[]" definiert es ein konstantes char-Array und der gleiche Variablenname bezieht sich sowohl auf das Array als auch auf einen Zeiger auf den Anfang des Arrays. Sie ist in diesem Fall tatsächlich konstant.
  • Const char * variable_name
    deklariert einen Zeiger auf ein konstantes Zeichen. Wir können diesen Zeiger nicht verwenden, um den Wert zu ändern, auf den gezeigt wird.

    Const* char Variablenname
    Wir können keinen konstanten Zeiger wie diesen deklarieren.

Schreibe deine Antwort

Ihre Antwort erscheint nach der Moderation appear