4 in 1 - Medieninformatik - Hochschule RheinMain
4 in 1 - Medieninformatik - Hochschule RheinMain
4 in 1 - Medieninformatik - Hochschule RheinMain
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