010
25.12.2003, 21:24 Uhr
0xdeadbeef
Gott (Operator)
|
Na, Pablo, etwas gestresst? Sei nicht so streng, ist doch Weihnachten...
@Neuling: Der Code, den du hast, ist ziemlich merkwürdig. Ich gehe davon aus, dass er auch genau das sein soll, damit du die Auswirkungen im einzelnen verstehst. Ich versuchs mal, so gut wie möglich zu erklären:
C++: |
int f (int x, int *y)
|
Das deklariert eine Funktion f, die eine Zahl als ersten Parameter und einen Zeiger auf eine Zahl als zweiten entgegennimmt. Ich nehme an, was ein Pointer ist, ist bekannt? Der Sinn dahinter ist in diesem Fall ein handgemachtes call-by-reference. Wenn du später f(a[ i ], &a[j]) aufrufst, kann f den Wert von a[j] direkt verändern.
C++: |
{ int z; /* Code einrücken guuut, weil übersichtlich */
z = (x + *y) % 5;
|
Hier wird der spätere Rückgabewert ausgerechnet - erster Parameter plus Inhalt des zweiten Parameters modulo 5. In deinem Programm heißt das (a[ i ] + a[j]) % 5.
C++: |
*y = x: return (z); }
|
Bedeutet soviel wie a[j] = a[ i ]. Funktioniert nur, weil a[j] per Referenz übergeben wird.
Wenn man das ganze inline auflöst, sieht das so aus:
C++: |
int main () /* <-- main ist per Konvention immer int */ { /* <-- Tipfeeler: Falsche Klammer*/ int i, j, a[5] = {2,1,4,0,3}; /* <-- Hier fehlte ein Komma. */
for (i = 0; i<5; i++) { j = a[ i ]; a[ i ] = (a[ i ] + a[j]) % 5; a[j] = j; /* <-- j hat den alten Wert von a[ i ] */ }
return 0; /* <-- eingefügt, der Form halber. 0 als Rückgabewert von main heißt, alles ist gut gelaufen */ }
|
-- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |