Forum: Compiler & IDEs "Kleines" Verständnis Problem


von Hänge_Fest (Gast)


Lesenswert?

Hallo,

da ich mir C selber beigebracht habe und auch noch dabei bin verstehe 
ich folgene Funktion nicht so ganz:
1
void lcd_data( uint8_t data )
2
{
3
 ...
4
}
5
6
void lcd_string( const char *data )
7
{
8
    while( *data != '\0' )
9
        lcd_data( *data++ );
10
}
1
const char
 bedeutet doch das der Wert Konstant bleibt und unveränderbar ist, oder?
1
*data
 .. ja da von habe ich schonmal gelesen. * kenzeichnen Zeiger... das ist 
leider alles was ich dazu weiß.

Zum Schluss beschäftigt mich noch
1
lcd_data( *data++ );
bewirkt *data++ nicht das der Wert um eins erhöht wird?

PS:
1
    while( *data != '\0' )
Wird '\0' automatisch an ein ende "gehängt" ? Wenn ich z.B. schreibe:
1
const char test = 'Hallo Welt';
2
// test komplett 'Hallo Welt\0'

ich bedanke mich schonmal bei euch :)

von Karl H. (kbuchegg)


Lesenswert?

Hänge_Fest schrieb:

>
1
const char
 bedeutet doch das der Wert Konstant bleibt und
> unveränderbar ist, oder?

Jein.
Das kommt drauf an, wo dieses const benutzt wird.

hier an dieser Stelle, als Argument einer Funktion, kann man es lesen 
als:

Lieber Aufrufer! Ich, die Funktion, werde nicht versuchen, das was du 
mir übergibst zu verändern. Ich sichere zu, die const-ness dessen was du 
mir gibst zu gewährleisten.


>
1
*data
 .. ja da von habe ich schonmal gelesen. * kenzeichnen
> Zeiger... das ist leider alles was ich dazu weiß.

Ja, das ist ein Zeiger.
(beim Variablennamen zu lesen anfangen)

   const char * i

     i ist ein                                       i
     i ist ein Zeiger                              * i
     i ist ein Zeiger auf Character           char * i
     und diese(r) Character ist const   const char * i


d.h. hier ist das worauf der Zeiger zeigt unveränderbar. Der Zeiger 
selbst kann aber ohne weiteres verändert werden, so dass er woanders 
hinzeigt.


> Zum Schluss beschäftigt mich noch
>
1
> lcd_data( *data++ );
2
>
> bewirkt *data++ nicht das der Wert um eins erhöht wird?

Welcher Wert?
Du musst immer unterscheiden:
Wovon ist die Rede. Vom Zeiger selbst oder von dem worauf der Zeiger 
zeigt.

Das ++ wirkt auf den Zeiger, aber nicht auf den Character, auf den der 
Zeiger zeigt.

> Wird '\0' automatisch an ein ende "gehängt" ? Wenn ich z.B. schreibe:

Ja.
Die restlichen Fragen waren gut. Aber die hier verunsichert mich. Du 
hast hoffentlich ein C-Buch? Ohne kommst du nicht weit, bei deinen 
autodidaktischen C-Studien

von Hänge_Fest (Gast)


Lesenswert?

Hallo,

deine Antworten haben mir wirklich sehr! viel weiter geholfen, Danke.

Zu deiner Frage ob ich ein C-Buch habe: Nein. leider nicht aber ich 
glaube ich sollte mir vlt. doch mal eins anschaffen.

von Klaus W. (mfgkw)


Lesenswert?

Gute Idee!

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
Noch kein Account? Hier anmelden.