21.11.2013 Aufrufe

Eine Einführung in die Programmiersprache C und die Grundlagen ...

Eine Einführung in die Programmiersprache C und die Grundlagen ...

Eine Einführung in die Programmiersprache C und die Grundlagen ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>E<strong>in</strong>e</strong> <strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> Informatik <strong>und</strong> <strong>die</strong> <strong>Programmiersprache</strong> C<br />

17.3 Po<strong>in</strong>ter <strong>und</strong> e<strong>in</strong>dimensionale Arrays<br />

E<strong>in</strong>dimensionale Arrays <strong>und</strong> Po<strong>in</strong>ter s<strong>in</strong>d <strong>in</strong> C sehr nahe verwandt. E<strong>in</strong> Arrayname ist <strong>in</strong> C nichts<br />

anderes als e<strong>in</strong> konstanter Zeiger auf den Anfang des Arrays. Der Indexoperator [] kann deshalb<br />

auch auf Po<strong>in</strong>ter <strong>und</strong> der * auf Arraynamen angewendet werden:<br />

Die Operation *(Ptr + n) ist äquivalent zu Ptr[n]. Zwischen den beiden Varianten kann frei<br />

gewählt werden. Für Arrays ist es aber üblich ausschliesslich [] zu verwenden, bei Zeigern wird<br />

h<strong>in</strong>gegen oft auch [] anstelle von * verwendet, <strong>in</strong>sbesondere wenn der Zeiger auf e<strong>in</strong> Array zeigt.<br />

double Tabelle[] =<br />

{1, 1.2, 1.5, 1.8, 2.2, 2.7, 3.3, 3.9, 4.7, 5.6, 6.8, 8.1, 0};<br />

double *Ptr = Tabelle + 3; /* Zeigt nun auf 1.8 */<br />

pr<strong>in</strong>tf("%f", *(Tabelle + 4) ); /* Gibt 2.2 aus */<br />

pr<strong>in</strong>tf("%f", Ptr[2] ); /* Gibt 2.7 aus */<br />

pr<strong>in</strong>tf("%f", Ptr[-2] ); /* Gibt 1.2 aus (Negative Indices erlaubt !) */<br />

pr<strong>in</strong>tf("%f", *Ptr++ ); /* Gibt 1.8 aus, zeigt danach auf 2.2 */<br />

/* Gibt den Inhalt des gesamten Arrays aus */<br />

for (Ptr = Tabelle; *Ptr != 0.0; Ptr++) {<br />

pr<strong>in</strong>tf("%f\n", *Ptr);<br />

}<br />

/* Gibt ebenfalls den Inhalt des gesamten Arrays aus (jeweils 2 mal) */<br />

Ptr = Tabelle;<br />

for (i = 0; i < 12; i++) {<br />

pr<strong>in</strong>tf("%f\n", Tabelle[i]);<br />

pr<strong>in</strong>tf("%f\n", Ptr[i]);<br />

}<br />

17.4 Po<strong>in</strong>ter <strong>und</strong> mehrdimensionale Arrays<br />

Bei mehrdimensionalen Arrays wird <strong>die</strong> Sache schon etwas komplizierter, <strong>in</strong>t **p <strong>und</strong> <strong>in</strong>t a[][3]<br />

s<strong>in</strong>d nicht äquivalent zue<strong>in</strong>ander!<br />

Sondern der Po<strong>in</strong>ter <strong>in</strong>t (*p)[3] ist kompatibel zum Array <strong>in</strong>t a[][3].<br />

<strong>in</strong>t a[7][3];<br />

<strong>in</strong>t **p1; /* Achtung, Po<strong>in</strong>ter auf Po<strong>in</strong>ter auf <strong>in</strong>t */<br />

<strong>in</strong>t (*p2)[3]; /* Korrekt, Po<strong>in</strong>ter auf Array mit 3 Elementen */<br />

<strong>in</strong>t (*p3)[7]; /* Korrekt, Po<strong>in</strong>ter auf Array mit 7 Elementen */<br />

<strong>in</strong>t *p4[3]; /* Achtung, Array von drei Po<strong>in</strong>tern, nicht Po<strong>in</strong>ter auf Array */<br />

p1 = a; /* Nicht Korrekt */<br />

p2 = a; /* Korrekt */<br />

p3 = a; /* Nicht Korrekt, Array hat nur 3 Spalten */<br />

p4 = a; /* Nicht Korrekt */<br />

p2[5][1] = 5; /* Zugriff auf Array via Po<strong>in</strong>ter */<br />

/* Auf alle oben def<strong>in</strong>ierten Po<strong>in</strong>ter kann aber mit e<strong>in</strong>er 2-Dimensionalen */<br />

/* Indizierung zugegriffen werden, aber <strong>die</strong> darunterliegenden Datenstrukturen */<br />

/* s<strong>in</strong>d Gr<strong>und</strong>verschieden */<br />

p1[3][2] = 7; /* Korrekter Zugriff, aber nicht auf Array */<br />

p2[3][2] = 7; /* Korrekter Zugriff auf n*3 Array, passt zu a */<br />

p3[3][2] = 7; /* Korrekter Zugriff auf n*7 Array */<br />

p4[2][3] = 7; /* Korrekter Zugriff, aber nicht auf Array */<br />

Gedruckt am 10.09.2009 14:23:00 Letzte Änderung am: 10. September 2009 Version 2.4.1, I. Oesch 60/147

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!