Forum: PC-Programmierung Frage zu C


von Helmut (Gast)


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?

von Rufus Τ. F. (rufus) Benutzerseite


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);


von Karl H. (kbuchegg)


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.

von Helmut (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


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.



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.