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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!