Frage zu C

Gast #524472
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?
Persönliche Seite #524487
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);

#524491
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.
#524565
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren