www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Warum zwei const in Funktionsdeklaration?


Autor: X. H. (shadow0815)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, habe folgenden Funktionskopf:

int getc_count( const char * const path, size_t * const result );
[Funktion soll ne Dateigröße ermitteln]
von: http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht7Ht/c_faq_de


Was ich nicht verstehe, warum ein const mehr?
Was ist der Unterschied zwischen:

const char * const path

und

const char * path

?

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
const char * path
ist ein Zeiger auf eine Konstante, während
const char * const path
ein konstanter Zeiger auf eine Konstante ist.

Im ersten Fall ist also der Zeiger selbst nicht konstant, sondern nur 
der Wert, auf den er zeigt.

Autor: X. H. (shadow0815)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin ich vielleicht gerad drauf gekommen?

Wird das so zerlegt?
const char * const path

const char * ---> Pointer, der KONSTANT nur auf eine Adresse zeigen darf 
(keine andere Ausrichtung möglich)
const path ---> in path darf der referenzierte String nicht geändert 
werden?

Autor: X. H. (shadow0815)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
johnny.m wrote:
>
> const char * path
> 
> ist ein Zeiger auf eine Konstante, während
>
> const char * const path
> 
> ein konstanter Zeiger auf eine Konstante ist.
>
> Im ersten Fall ist also der Zeiger selbst nicht konstant, sondern nur
> der Wert, auf den er zeigt.

Danke, johnny.m, hatte ich also doch nicht richtig rum gedacht :)

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Faustregel: C-Deklarationen von hinten lesen, dann versteht man sie. 
Also wird im ganzen Satz aus "const char * const path":
path ist ein konstanter Pointer, der auf einen char zeigt, welcher 
konstant ist.

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.