Konstante Zeiger definieren
-
Hallo,
ich lese mich gerade in C++ ein und bin bei den Zeigern schon auf das erste Problem gestoßen:
Einen Zeiger mit
int *zeiger;zu definieren funktionierte ohne Probleme. Auch ein Zeiger auf ein konstantes int ging:const int *zeiger;.Dann stand im Buch jedoch folgendes:
const *char cptr = 0;(für einen konstanten Zeiger).
Wenn ich dies allerdings compile, kommt eine Fehlermeldung:
test.cpp: In function `int main()': test.cpp:8: error: expected unqualified-id before "char" test.cpp:8: error: expected initializer before "char"Google hat mich dann auf die Variante
char * const cptr = 0;gebracht.Was ist denn nun "richtig" bzw. funktioniert die Variante aus dem Buch überhaupt irgendwie - und ich stelle mich einfach zu blöd an? Oder gibt es in Sachen Zeigerdefinition einen Standard, an den man sich halten sollte?
-
const char *cstr = "Hallo"; // Zeiger auf konstante Daten char * const cstr = "Hallo"; // Konstanter Zeiger auf Daten const char * const cstr = "Hallo"; // Konstanter Zeiger, konstante DatenWo const steht ist egal. const int a == int const a.
Wenn const links vom * steht, ist der Zeiger konstant, andernfalls die Daten.
-
Leider bekomme ich trotzdem diese Fehlermeldung, wie eben auch:
#include <iostream> using namespace std; int main(void) { const * char cstr = "Hallo"; // Konstanter Zeiger auf Daten return 0; }test.cpp: In function `int main()': test.cpp:6: error: expected unqualified-id before "char" test.cpp:6: error: expected initializer before "char"Als Compiler nehme ich GCC.
-
Es heißt ja auch
char * const, rechte Seite vom * ist const ---> Konstanter Zeiger
-
Also doch so?

Gut, so funktioniert es auch einwandfrei. Dankeschön.
-
Amgon schrieb:
Leider bekomme ich trotzdem diese Fehlermeldung, wie eben auch:
#include <iostream> using namespace std; int main(void) { const * char cstr = "Hallo"; // Konstanter Zeiger auf Daten return 0; }Bist Du dir sicher, dass Du dich nicht verguckt hast? Steht im Buch vielleicht:
char * const cstr = "Hallo";?
Denn
const*charmacht wirklich keinen Sinn.edit: Upps! Ich sollte mir angewöhnen, vor dem Antwortschreiben mal die Seite zu refreshen.

-
Klar, wie sonst? Eine logischere Eselsbrücke als das Links/Rechts vom Stern wäre etwa:
+-----------+-----------+ | Datentyp | Zeigertyp | +-----------+-----------+ | char | * | = char *data, nicht const-Daten/Pointer |const char | * | = const char *data, nicht const-Pointer, const-Daten | char | *const | = char *const data, nicht const-Daten, const Pointer |const char | *const | = const char *const data, const-Daten/Pointer +-----------+-----------+
-
@Amgon:
Also wenn dann bitteconst char* const cstr = "Hallo"; // Konstanter Zeiger auf DatenDu zeigst ja schließlich auf ein Stringliteral.