Hi,
Mir würde am besten
summe(s+(*f),f+1,n-1)
gefallen.Hm, ich wusste noch gar nicht, dass das auch funktioniert. Dachte, diese typabhängige Zeigerinkrementierung wäre nur für In-/Dekrementierungsoperatoren gemacht, aber auch +x / -x wird seine Anwendung finden.
Das ist ja auch keine Zeigerinkrementierung.
Du übergibst ja auch nicht --n, sondern n-1; das ist genau das gleiche.
Es wird nur die Adresse des nächsten Elements an die Funktion übergeben. In der rufenden Funktion bleibt der Zeiger unverändert.
Außerdem kann man so auch auf Elemente weiter hinten im Feld zugreifen.
Anschauungsbeispiel:
f == &f[0] == f+0
&f[5] == f+5
f[0] == *(f+0) // +0 kann natürlich auch weggelassen werden
f[5] == *(f+5)
//jetz wirds abstrakt und theoretisch (das wirst du hoffentlich nie so vorfinden), aber es geht noch weiter:
== *(1+f) == 1[f]
Die Schreibweise mit f+1 hat den Vorteil, dass der ursprüngliche Pointer erhalten bleibt, was auch das Problem, das du hattest mit der Abarbeitungsreihenfolge der Argumente, beseitigt.
Das kannst du z.B. bei der dynamischen Speicherverwaltung verwenden, bei der du sonst die Anfangsadresse in einer Extra-Variablen speichern müsstest, damit du den Speicher später wieder freigeben kannst.
Ich persönlich bleibe dann in diesem Fall trotzdem bei ++/--, das soll man ja auch bei gewöhnlichen Zählern in Schleifen etc. verwenden, zugunsten der Verständlichkeit des Codes.
Naja, hier sehe ich keinen Sinn, warum du den Zeiger noch incrementieren solltest.
Welchen Knopf drückt Ihr eigentlich für den schönen bunten Code? Java, Perl?
Ich mach das immer manuell: (code lang=C++)bla bla bla (/code)
nur mit eckigen statt runden klammern. Einen extra-Knopf gibt es dafür nicht, weil C++ hier vielleicht zu selten vorkommt und ausserdem in der Webprogrammierung ja nicht so häufig verwendet wird.
mfG,
steckl