24.02.2014 Aufrufe

4 in 1 - Medieninformatik - Hochschule RheinMain

4 in 1 - Medieninformatik - Hochschule RheinMain

4 in 1 - Medieninformatik - Hochschule RheinMain

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.

Programmieren <strong>in</strong> C<br />

Zeiger und Felder<br />

Programmieren <strong>in</strong> C<br />

Zeiger und Felder<br />

Zeiger und Felder s<strong>in</strong>d nicht dasselbe/1<br />

Zeiger und Felder s<strong>in</strong>d nicht dasselbe/2<br />

E<strong>in</strong>em Feldnamen kann ke<strong>in</strong> Zeiger<br />

zugewiesen werden<br />

• Der Feldname selbst ist ke<strong>in</strong> Zeiger<br />

• Es wird ke<strong>in</strong> Platz angelegt für den<br />

Feldnamen<br />

E<strong>in</strong> Zeiger selbst braucht Speicherplatz<br />

• Der Zeiger be<strong>in</strong>haltet die Adresse an<br />

der das erste Element des Feldes<br />

beg<strong>in</strong>nt<br />

• E<strong>in</strong> Zeiger zeigt bei Wertänderung auf<br />

andere Speicherbereiche<br />

1 char str[] = "abcde";<br />

2 char *ptr = "abcde";<br />

3<br />

4 ptr = str; /* geht */<br />

5 /* str = ptr; geht nicht */<br />

str a b c d e \0<br />

ptr 0x.. a b c d e \0<br />

Feld von Felder<br />

• E<strong>in</strong> Feld von Feldern ist eigentlich e<strong>in</strong><br />

grosses Feld<br />

• Row Major, zeilenweise<br />

• Die Größe ist fix<br />

Feld von Zeiger<br />

• E<strong>in</strong> Feld von Zeigern ist e<strong>in</strong> normales<br />

e<strong>in</strong>dimensionales Feld<br />

• Die Werte s<strong>in</strong>d Zeiger auf Werte, bzw.<br />

Zeiger auf den Anfang von Feldern<br />

1 char *pp[] =<br />

2 {"e<strong>in</strong>", "kle<strong>in</strong>er", "text"};<br />

3 char vv[][10] =<br />

4 {"e<strong>in</strong>", "kle<strong>in</strong>er", "text"};<br />

5 pr<strong>in</strong>tf("%ld %ld\n", sizeof pp, sizeof vv);<br />

12 30<br />

0<br />

1<br />

2<br />

pp<br />

0x..<br />

0x..<br />

0x..<br />

e i n \0<br />

k l e i<br />

t e s t<br />

n e r \0<br />

\0<br />

0<br />

1<br />

2<br />

vv<br />

e i n \0<br />

k l e i n e r \0<br />

t e s t \0<br />

Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 77 / 326<br />

Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 78 / 326<br />

Programmieren <strong>in</strong> C<br />

Zeiger und Felder<br />

Programmieren <strong>in</strong> C<br />

Zeiger und Felder<br />

Zeigersalat<br />

Zeigersalat – Zeile 5<br />

1 char *c[] = { "ENTER", "NEW", "POINT",<br />

2 "FIRST" };<br />

3 char **cp[] = { c+3, c+2, c+1, c };<br />

4 char ***cpp = cp;<br />

5 pr<strong>in</strong>tf("%s", **++cpp);<br />

6 pr<strong>in</strong>tf("%s", *--*++cpp+3);<br />

7 pr<strong>in</strong>tf("%s", *cpp[-2]+3);<br />

8 pr<strong>in</strong>tf("%s\n", cpp[-1][-1]+1);<br />

1 char *c[] = { "ENTER", "NEW", "POINT",<br />

2 "FIRST" };<br />

3 char **cp[] = { c+3, c+2, c+1, c };<br />

4 char ***cpp = cp;<br />

5 pr<strong>in</strong>tf("%s", **++cpp);<br />

6 pr<strong>in</strong>tf("%s", *--*++cpp+3);<br />

7 pr<strong>in</strong>tf("%s", *cpp[-2]+3);<br />

8 pr<strong>in</strong>tf("%s\n", cpp[-1][-1]+1);<br />

0x..<br />

cpp<br />

3<br />

2<br />

0x..<br />

0x..<br />

0x..<br />

1<br />

0x..<br />

0<br />

cp<br />

0x..<br />

0x..<br />

0x..<br />

0x..<br />

c<br />

F I R S<br />

P O I N<br />

N E W \0<br />

E N T E<br />

T \0<br />

T \0<br />

R \0<br />

0x..<br />

cpp<br />

3<br />

2<br />

0x..<br />

0x..<br />

0x..<br />

1<br />

0x..<br />

0<br />

cp<br />

0x..<br />

0x..<br />

0x..<br />

0x..<br />

c<br />

F I R S<br />

P O I N<br />

N E W \0<br />

E N T E<br />

T \0<br />

T \0<br />

R \0<br />

Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 79 / 326<br />

POINT<br />

Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 80 / 326

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!