mikrocontroller.net

Forum: Compiler & IDEs Newbiefrage zu C-Typdeklarationen


Autor: Volkhard (Gast)
Datum:

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

Autor: Rufus T. Firefly (Gast)
Datum:

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

Autor: Jochen (Gast)
Datum:

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

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Volkhard (Gast)
Datum:

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

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
char* ptr;
char *ptr;

Das ist exakt dasselbe.

Autor: Jochen (Gast)
Datum:

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

Autor: Stefan Seegel (Gast)
Datum:

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

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.