Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
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 11.09.2008 13:04:00 Letzte Änderung am: 11. September 2008 Version 2.4, I. Oesch 47/147