Hallo zusammen, ich habe hier ein Teilstück von einem Code, der mir nicht verständlich ist. Kann mir den jemand mal bitte erläutern? Danke Bruno
hallo. es werden const char zeigervariablen deklariert und gleichzeitig intialisiert...
Der Programmierer wollte sich wohl ein wenig Tipparbeit sparen..., äquivalent und leichter zu lesen wäre:
1 | const char * const str_Klassen[]={ "a", "b" }; |
2 | const char * const str_Objekte[]={ "c", "dd" }; |
3 | usw... |
Komme aber nicht so mit dem *const klar. Ein Zeiger wird doch am Variablennamen gekennzeichnet. Oder hat das mit der Kommaunterteilung am Zeilenende zu tun?
Ja, liegt am Komma. z.B. Bei
1 | int a=1,b=2; |
bezieht sich das "int" auf a UND b, bei obigem Code ist es halt das "const char", das für die nachfolgenden Variablen gilt. Zum besseren Verstehen vielleicht einfach mal den code OHNE alle "const" drin vorstellen, vielleicht wirds dann klarer.
Also habe ich hier eine const char und einen const Zeiger der auf ein Array zeigt??
z.B str_Klassen[] ist ein array von zeigervariablen vom typ const char!
Das zweite const besagt lediglich, dass nicht nur das Ziel des Pointers, sondern auch der Pointer selbst konstant ist.
1 | const char *variable; |
deklariert einen Zeiger auf eine Variable vom Typ const char während
1 | const char *const variable; |
einen konstanten Zeiger auf eine Variable vom Typ const char deklariert.
Bruno wrote: > Komme aber nicht so mit dem *const klar. Ein Zeiger wird doch am > Variablennamen gekennzeichnet. Oder hat das mit der Kommaunterteilung am > Zeilenende zu tun? Yep. Ist im Grunde das gleiche, wie wenn du schreiben würdest int i, j, k; jetzt kommen ein paar Zeilenumbrüche dazu int i, j, k; Soweit so gut. Jetzt gehst aber weiter: Das was hier deifniert wird, sind Pointer. In C gehört der Pointer-* in einer Definition immer zur Variablen und nicht zu Datentyp. int * i, j; definiert 2 Variablen. i ist ein Pointer auf int, j ist ein ganz normaler int. Wenn j ebenfalls ein Pointer sein soll, dann muss man das so schreiben int * i, * j; Wieder: Wenn da jetzt ein paar Zeilenumbrüche dazukommen, dann sieht es so aus int * i, * j; Damit hast du schon fast die Form aus deinem Posting. Jetzt sind die Pointer aber nicht einfach nur Pointer, sondern es sind const Pointer. const wirkt immer auf den Bestandteil links von ihm, es sei denn es ist bereits das linkste Sprachelement. In dem Fall gilt es auf das Element rechts von ihm const int ist also ein integer, welcher konstant ist int const ist ebenfalls ein integer, welcher konstant ist const int * ist ein Pointer, welcher auf einen int zeigt und der int ist konstant int const * ebenso: der Pointer zeigt auf einen konstanten int int * const hier ist der Pointer konstant. Er zeigt allerdings auf eine Speicherstelle, an der ein int liegt und dieser int könnte verändert werden const int * const hier ist sowohl der Pointer konstant als auch das worauf er zeigt. Um also Auszudrücken, dass der Pointer selbst konstant ist, muss das const rechts vom * stehen. Und damit hast du alle Zutaten beisammen um zu verstehen, was const char * const a, * const b, * const c; bedeutet. Es werden 3 Pointer vereinbart: a, b, und c. Jeder dieser Pointer ist selbst konstant und zeigt auf ein Zeichen (eine Zeichen- kette) die ebenfalls konstant ist. Und da hier alles konstant ist, muss das auch initialisiert werden. Später Zuweisen geht nicht, weil man ja an etwas das konstant ist, nichts zuweisen kann. const char * const a = "Hallo", * const b = "Welt", * const c = "Juhu"; Misch jetzt noch die Array Syntax für a, b, und c rein und ändere die Form der Initialisierung für Array Initialisierung um und du bist genau bei deinem Code.
Schon mal dran gedacht nen Buch zu schreiben??? Das war super. Danke!!!
Kann mich nur anschließen, klasse erklärt! Bitte ein C Buch schreiben!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.