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

11.10 Arrays <strong>und</strong> Funktionen<br />

Arrays können an Funktionen übergeben werden, aber nicht von Funktionen zurückgeliefert werden<br />

(Ke<strong>in</strong> return von Arrays). Arrays werden dabei immer By Reference übergeben, d.h. es wird nie<br />

e<strong>in</strong>e Lokalkopie erzeugt, sondern nur e<strong>in</strong>e Referenz (Adresse, Po<strong>in</strong>ter) übergeben. Innerhalb der<br />

Funktion wird also mit den Orig<strong>in</strong>alwerten gearbeitet.<br />

<strong>in</strong>t Summe(<strong>in</strong>t a1[10])<br />

{<br />

<strong>in</strong>t i;<br />

<strong>in</strong>t Summe = 0;<br />

}<br />

for(i = 0; i < 10; i++) { /* Summe ueber Array bilden */<br />

Summe += a1[i];<br />

}<br />

return Summe;<br />

void Modify(<strong>in</strong>t a1[10])<br />

{<br />

a1[3] = 17; /* Orig<strong>in</strong>alarray von Aufrufer wird verändert */<br />

}<br />

Die Grössenangabe ist für <strong>die</strong> erste Dimension optional, <strong>und</strong> wird auch nicht überprüft, d.h. <strong>die</strong><br />

Grösse des übergebenen Arrays muss nicht mit der Grösse <strong>in</strong> der Funktionsdef<strong>in</strong>ition übere<strong>in</strong>stimmen.<br />

<strong>in</strong>t b1[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};<br />

<strong>in</strong>t b2[3] = {1, 2, 3};<br />

<strong>in</strong>t b3[15] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};<br />

<strong>in</strong>t c;<br />

c = Summe(b1); /* Ke<strong>in</strong> Problem */<br />

c = Summe(b2); /* Wird fehlerfrei Compiliert, duerfte aber Abstuerzen */<br />

c = Summe(b3); /* Wird fehlerfrei Compiliert, aber nur <strong>die</strong> ersten 10 */<br />

/* Elemente werden Summiert */<br />

Die obige Funktionsdef<strong>in</strong>ition darf auch wie folgt geschrieben werden<br />

void Modify(<strong>in</strong>t a1[]) /* Arraygroesse nicht festgelegt */<br />

{<br />

a1[3] = 17; /* Orig<strong>in</strong>alarray von Aufrufer wird verändert */<br />

}<br />

In <strong>die</strong>sem Fall übergibt man aber besser auch gleich noch <strong>die</strong> effektive Grösse des Arrays als weiteren<br />

Parameter, <strong>und</strong> benutzt ihn <strong>in</strong>nerhalb der Funktion, z.b. als Schlaufenendwert.<br />

void Modify(<strong>in</strong>t a1[], <strong>in</strong>t Groesse);<br />

Bei mehrdimensionalen Arrays ist nur <strong>die</strong> erste Dimensionsangabe optional, <strong>die</strong> restlichen Dimensionen<br />

müssen angegeben werden, <strong>und</strong> müssen auch beim Aufruf übere<strong>in</strong>stimmen. (Man kann sich<br />

mehrdimensionale Arrays e<strong>in</strong>fach als e<strong>in</strong> Array von Arrays mit e<strong>in</strong>er Dimension weniger vorstellen,<br />

also e<strong>in</strong> Array welches aus Arrays besteht)<br />

void DoSometh<strong>in</strong>g(<strong>in</strong>t a1[][10][5][3], <strong>in</strong>t Groesse); /* Erste Dimension optional*/<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!