Was ist der Unterschied zwischen:
char * const
und
const char *
Was ist der Unterschied zwischen:
char * const
und
const char *
Der Unterschied besteht darin, dass const char *
ist ein Zeiger auf eine const char
, während char * const
ist ein konstanter Zeiger auf eine char
.
Im ersten Fall kann der Wert, auf den gezeigt wird, nicht geändert werden, wohl aber der Zeiger. Im zweiten Fall kann sich der Wert, auf den gezeigt wird, ändern, der Zeiger jedoch nicht (ähnlich wie bei einer Referenz).
Außerdem gibt es eine
const char * const
der ein konstanter Zeiger auf ein konstantes Zeichen ist (es kann also nichts daran geändert werden).
Nota:
Die beiden folgenden Formen sind gleichwertig:
const char *
und
char const *
Der genaue Grund dafür ist in der C++-Norm beschrieben, aber es ist wichtig, dies zu beachten und Verwirrung zu vermeiden. Ich kenne mehrere Codierungsstandards, die dies bevorzugen:
char const
über
const char
(mit oder ohne Zeiger), so dass die Platzierung des const
Element ist dasselbe wie bei einem Zeiger const
.
const
modifiziert immer das Ding, das vor ihm steht (links davon), AUSSER wenn es das erste Ding in einer Typdeklaration ist, wo es das Ding modifiziert, das nach ihm steht (rechts davon).
Die beiden sind also identisch:
int const *i1;
const int *i2;
definieren sie Zeiger auf eine const int
. Sie können ändern, wo i1
y i2
Punkte, aber Sie können den Wert, auf den sie zeigen, nicht ändern.
Dies:
int *const i3 = (int*) 0x12345678;
definiert eine const
Zeiger auf eine Ganzzahl und initialisiert ihn auf die Speicherstelle 12345678. Sie können den int
Wert an der Adresse 12345678, aber Sie können die Adresse nicht ändern, die i3
zeigt auf.
Faustformel: Lesen Sie die Definition von rechts nach links!
const int *foo;
Bedeutet " foo
Punkte ( *
) zu einer int
die sich nicht ändern können ( const
)".
Für den Programmierer bedeutet das: "Ich werde die Daten nicht ändern. Wert wovon foo
zeigt auf".
*foo = 123;
o foo[0] = 123;
wäre ungültig.foo = &bar;
ist erlaubt.int *const foo;
Bedeutet " foo
nicht ändern kann ( const
) und Punkte ( *
) zu einer int
".
Für den Programmierer bedeutet das: "Ich werde die Daten nicht ändern. Speicheradresse dass foo
bezieht sich auf".
*foo = 123;
o foo[0] = 123;
ist erlaubt.foo = &bar;
wäre ungültig.const int *const foo;
Bedeutet " foo
nicht ändern kann ( const
) und Punkte ( *
) zu einer int
die sich nicht ändern können ( const
)".
Für den Programmierer bedeutet dies: "Ich werde die Daten nicht ändern. Wert wovon foo
verweist, noch werde ich die Adresse dass foo
bezieht sich auf".
*foo = 123;
o foo[0] = 123;
wäre ungültig.foo = &bar;
wäre ungültig. CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.