www.mikrocontroller.net

Forum: PC-Programmierung Frage zu C


Autor: Helmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich lese gerade ein Buch über C um meine sehr Oberflächlichen Kenntnisse 
zu vertiefen.

In dem Buch steht ein Beipsiel mit folgender Strucktur:

struct Datum {
     int jahr;
     char monat[10];
     int tag;
} test;

Jetzt soll eine Funktion test.monat drucken können.
Dazu wird folgender Prototyp angegeben:

void drucken(char *);

Ich verstehe aber nicht wozu das Sternchen gesetzt wird?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Literaturhinweis:

Kernighan & Ritchie, "Programmieren in C", zweite Auflage, 
Hanser-Verlag.

Das Sternchen zeigt an, daß es sich beim Parameter der Funktion 
"drucken" um einen Pointer (Zeiger) auf char handelt. In C werden so 
auch Strings (Zeichenketten) gehandhabt.
Dazu kommt noch der Array-Pointer-Dualismus, so daß ein Array synonym 
mit einem Pointer auf dessen erstes Element genutzt werden kann.

Also:

  drucken(test.monat);


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

Bewertung
0 lesenswert
nicht lesenswert
Helmut wrote:
> Jetzt soll eine Funktion test.monat drucken können.
> Dazu wird folgender Prototyp angegeben:
>
> void drucken(char *);
>
> Ich verstehe aber nicht wozu das Sternchen gesetzt wird?

In C kann man mit Arrays als ganzes nur sehr wenig (eigentlich
gar nichts) machen. Insbesondere kann man kein Array an
eine Funktion übergeben.

Arrays werden in C immer übergeben, indem die Adresse des
ersten Array Elements übergeben wird.
Daher bruacht die empfangende Funktion eine Pointer Variable
in der dann diese Adresse gespeichert wird.

Autor: Helmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, jetzt ists mir klar.
Wusste nicht das der Bezeichner eines Feldes ein Pointer auf das erste 
Element ist.
Danke

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

Bewertung
0 lesenswert
nicht lesenswert
Helmut wrote:
> Ah, jetzt ists mir klar.
> Wusste nicht das der Bezeichner eines Feldes ein Pointer auf das erste
> Element ist.
> Danke

Nur um das klarzustellen.
Der Arraybezeichner ist kein Pointer. Er wird aber so verwendet
indem der C Compiler diese Konvertierung automatisch macht, wenn
notwendig.



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.