C-Nachhilfe Verstehe Teilcode nicht

#867889
Lesenswert?

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.
#867898
Lesenswert?

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.
#867899
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren