mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C-Nachhilfe Verstehe Teilcode nicht


Autor: ich bin ein (Gast)
Datum:
Angehängte Dateien:
  • preview image for C.PNG
    C.PNG
    27,4 KB, 274 Downloads

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo. es werden const char zeigervariablen deklariert und gleichzeitig 
intialisiert...

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Programmierer wollte sich wohl ein wenig Tipparbeit sparen..., 
äquivalent und leichter zu lesen wäre:
const char * const str_Klassen[]={ "a", "b" };
const char * const str_Objekte[]={ "c", "dd" };
usw...

Autor: Bruno (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, liegt am Komma.

z.B. Bei
 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.

Autor: Bruno (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also habe ich hier eine const char und einen const Zeiger der auf ein 
Array zeigt??

Autor: Bruno (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wohl eher einen Zeiger der auf ein const Array zeigt.

Autor: marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
z.B  str_Klassen[] ist ein array von zeigervariablen vom typ const char!

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das zweite const besagt lediglich, dass nicht nur das Ziel des 
Pointers, sondern auch der Pointer selbst konstant ist.
const char *variable;
deklariert einen Zeiger auf eine Variable vom Typ const char während
const char *const variable;
einen konstanten Zeiger auf eine Variable vom Typ const char 
deklariert.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bruno (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon mal dran gedacht nen Buch zu schreiben??? Das war super. Danke!!!

Autor: Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mich nur anschließen, klasse erklärt! Bitte ein C Buch schreiben!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.