Forum: Compiler & IDEs Newbiefrage zu C-Typdeklarationen


von Volkhard (Gast)


Lesenswert?

Ich beginne gerade erst, mich mit C auseinanderzusetzen und habe noch
einige Verständnisprobleme bei der Deklaration und Verwendung von
Strings.
Folgender Hintergrund:
Ich möchte einen String Zeichen für Zeichen in ein LCD-Display
schreiben.
Ich habe dafür auch schon Codeschnippsel entdeckt, die mehr oder minder
gut funktionieren - allerdings würde ich auch gern verstehen, was ich da
eigentlich tue.
Ich habe zum Einen eine Funktion zum Schreiben eines einzelnen Char´s -
hier ist die Arbeitsweise vollkommen klar.
Eine weitere Funktion soll einen String übergeben bekommen und diesen
Zeichen für Zeichen mittels der vorgenannten Funktion ausgeben.
Hier beginnen meine persönlichen Fragezeichen:
Wie deklariere ich den Typ "String" überhaupt?
Wie kann ich auf einzelne Zeichen des Strings (beliebig oder der Reihe
nach) zugreifen?

Ich würde mich sehr freuen, wenn mir einer von Euch dabei auf die
Sprünge helfen könnte....
Danke im Voraus
Volkhard

von Rufus T. Firefly (Gast)


Lesenswert?

Ein String ist in C ein Array von chars. Das Stringende wird i.d.R.
durch das Zeichen '\0' (null) gekennzeichnet.

Näheres dazu liest man am besten im Buch "Programmieren in C",
Kernighan & Ritchie, zweite Auflage, Hanser Verlag.

von Jochen (Gast)


Lesenswert?

In dem Zusammenhang solltest Du Dir auf jeden Fall auch Pointer(Zeiger)
ansehen.

hier mal eine Bsp zum Zeichweisen ausgeben eines "Strings" (real
natürlich ein array of char)


void send_string(char* string)
{
    while(*string)
    {
        lcd_data(*string++); //diese Funktion gibt ein Char aufs LCD
    }
}

Du übergiebst der Funktion einen Zeiger der auf das erste Element
Deines Array of Char zeigt.
In der while-Schleife wir zuerst immer überprüft ob das Ende(0x00) des
"Strings" erreicht ist.
Wenn nicht wir der Inhalt(mit dem *) der Speicherstelle auf die der
Zeiger string zeigt ausgegeben und anschließend der Zeiger auf das
nächste element des Arrays gesetzt(mit dem ++).

Wie gesagt Zeiger sind elementar für C und das solltest Du dir auf
jeden Fall mal ansehen.

Der Kernighan & Ritchie ist auf jeden Fall eine gute Anlaufstelle


Gruß Jochen

von Dirk (Gast)


Lesenswert?


von Volkhard (Gast)


Lesenswert?

So, hier bin ich nochmals.
Habe mir inzwischen den Kernighan/Ritchie zugelegt und auch das
angegebene Onlinebuch durchstöbert.
Etliches ist mir dabei klar(er) geworden.
Eine Frage habe ich dennoch:
Dass über ein vorangestelltes Sternchen eine Variable dereferenziert
wird und über diesen Pointer auf den Variableninhalt zugegriffen
werden, habe ich begriffen.
Ich bin aber auch schon auf die Notation
char*
ohne (!) Zwischenraum zwischen dem Typ "char" und dem Sternchen
gestoßen.
Diese Variante habe ich in keiner meiner Quellen erläutert bekommen.
Handelt es sich dabei schlichtweg um einen Tippfehler (die Variante
"char *" ist mir durchaus schon klar)?
Vielen Dank im Voraus für die Belehrung...

von Rufus T. Firefly (Gast)


Lesenswert?

char* ptr;
char *ptr;

Das ist exakt dasselbe.

von Jochen (Gast)


Lesenswert?

wobei zweiter Notation besser ist denn:

char* a, b;
char *a, b

Beides macht a als Pointer auf char und b als char ist meiner Ansicht
nach aber bei der zweiten Variante besser zu erkennen.

Grüßle Jochen

von Stefan Seegel (Gast)


Lesenswert?

Tach! Ist Geschmackssache,

mir gefällt

char* a;

besser, weil ich hab die Variable a (letztes "Feld") die vom Typ
"pointer auf char" ist (erstes "Feld")...

Wenn man natürlich mehrere Variablen in einer Zeile definiert ist aber
Jochens Version besser, aus Gründen der Übersichtlichkeit würde ich
persönlich aber schreiben:

char a;
char b;
char* c;
char* d;

...der Geschmack rührt wohl von Pascal her, da hieße es
var
  a: ^byte;

Stefan

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.