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<br />
Programmieren <strong>in</strong> C<br />
Zeiger<br />
Vorrangregeln von Operatoren<br />
Zeiger – Beispiele/1<br />
Von hoch nach niedrig:<br />
10 () [] -> .<br />
9 ! ˜ ++ -- + - * & (typ) sizeof<br />
8 * / %<br />
+ -<br />
7 ><br />
6 < >=<br />
== !=<br />
5 &<br />
ˆ<br />
|<br />
4 &&<br />
||<br />
3 ?:<br />
Vorrang<br />
1 unsigned long l0 = 0;<br />
2 unsigned long l1 = 1;<br />
3 unsigned long l2 = 2;<br />
4 unsigned long *pl[3] = {<br />
5 &l0, &l1, &l2 /* not ANSI-C, but C99 */<br />
6 };<br />
7 *pl[0] = 0;<br />
1 double d[3] = {1.0, 2.0, 3.0};<br />
2 double (*pd)[3] = &d;<br />
3 (*pd)[0] = 3.0;<br />
1 unsigned <strong>in</strong>t u=42;<br />
2 unsigned <strong>in</strong>t *pu = &u;<br />
3 unsigned <strong>in</strong>t **ppu = &pu;<br />
4 unsigned <strong>in</strong>t ***pppu = &ppu;<br />
0 1 2<br />
pl 0x.. 0x.. 0x..<br />
l0 0 l1 1 l2 2<br />
0 1 2<br />
pd 0x.. d 1.0 2.0 3.0<br />
u 42<br />
pu 0x..<br />
ppu 0x..<br />
pppu 0x..<br />
2 = += -= *= %= ˆ= &= =<br />
1 ,<br />
Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 69 / 326<br />
Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 70 / 326<br />
Programmieren <strong>in</strong> C<br />
Zeiger<br />
Programmieren <strong>in</strong> C<br />
Zeiger<br />
Zeiger – Beispiele/2<br />
Zeigeroperationen, Zeiger auf void<br />
1 char ch;<br />
2 char *pc= &ch;<br />
3 char **ppc=&pc;<br />
4 char **xf[3][2];<br />
5 char **(*px)[3][2] = &xf;<br />
6<br />
7 ch = ’a’;<br />
8 *pc = ’a’;<br />
9 **ppc = ’a’;<br />
10 pr<strong>in</strong>tf("%p %p\n",<br />
11 (void *) pc, (void *) ppc);<br />
12 xf[0][1] = ppc;<br />
13 **(*px)[0][1] = ’b’;<br />
14 pr<strong>in</strong>tf("%c\n", ch);<br />
ppc<br />
px<br />
0x..<br />
0x..<br />
pc 0x.. ch<br />
xf 0<br />
1<br />
2<br />
0 1<br />
0x.. 0x..<br />
0x.. 0x..<br />
0x.. 0x..<br />
'a'<br />
'b'<br />
Operationen gleich(==), ungleich (!=)<br />
• Immer erlaubt<br />
• Test ob gleiche/ungleiche Adresse<br />
Zuweisung<br />
• Immer erlaubt<br />
• Gleicher Typ, sonst Warnung,<br />
vermeiden mit explizitem Cast<br />
• Von zu void * ohne Warnung<br />
void *, Zeiger auf beliebige Werte<br />
• Automatische Umwandlung bei<br />
Zuweisung<br />
• Dereferenzierung mit Inhaltsoperator<br />
verboten (was sollte rauskommen?)<br />
• Achtung: Böse, möglichst vermeiden<br />
1 char s[] = "hallo";<br />
2 char *cp = s;<br />
3 void *vp = cp;<br />
4 <strong>in</strong>t *ip;<br />
5<br />
6 pr<strong>in</strong>tf((s == cp) ? "==\n" : "!=\n");<br />
7 pr<strong>in</strong>tf((s != cp) ? "!=\n" : "==\n");<br />
8<br />
9 ip = vp; /* ke<strong>in</strong>e Warnung */<br />
10 ip = cp; /* Warnung */<br />
11 ip = (<strong>in</strong>t *) cp; /* ke<strong>in</strong>e Warnung */<br />
12<br />
13 pr<strong>in</strong>tf("%i\n",<br />
14 *ip); /* was auch immer... */<br />
==<br />
==<br />
1819042152<br />
Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 71 / 326<br />
Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 72 / 326