S. Lonci schrieb:
> Ich muss mit dem Wert rechnen...das geht mit der Pointervariablen aber
> nicht!
Könnte man genausogut. Aber eigentlich geht das am Kern der Frage
vorbei. Denn der lautet: Wozu überhaupt der Pointer? Den braucht doch
keiner.
Benutze keine Pointer, wenn du nicht musst!
> Ja, kann man. Das verbraucht aber Speicher!
Und deine lokale Variable verbraucht keinen Speicher?
Tatsächlich braucht deine Lösung sogar noch mehr Speicher. Denn in
deiner Version muss für die vom Aufrufer übergebene Adresse eine lokale
Pointer Variable eingerichtet werden, in die der Adresswert kopiert
wird. Und das dann noch zusätzlich zum unsigned int, der dann den Wert
kriegt.
> Und ich persönlich finde es
> per Pointer einfach eleganter.
Das ist nicht nicht mal Ansichtssache. So wie geschrieben ist das die
uneleganteste Form.
Die Peter II Version kann ich auch in dieser Form benutzen
1 | Tage = check_leapyear( 2025 );
|
um die Anzahl der Tage im Februar des Jahres 2025 feststellen zu lassen.
Bei deiner Version geht das nicht. Da brauch ich erst mal etwas, dessen
Adresse ich bestimmen kann
1 | unsigned int checkYear = 2025;
|
2 | Tage = check_leapyear( &checkYear );
|
Elegant ist das nicht gerade.
Benutze Pointer dann, wenn du Pointer benutzen musst! Aber nicht einfach
so. Diese Version braucht keinen Pointer als Argument. Die Funktion ist
vollkommen zufrieden, wenn sie eine Jahreszahl bekommt, die sie
überprüfen soll. Mehr braucht sie nicht. Also mach auch nicht mehr
draus.
Pointer als Funktionsargument brauchst du, wenn die Funktion in der Lage
sein soll, auf eine oder mehrere Variablen des Aufrufers schreibend
zuzugreifen. Pointer brauchst du, wenn du einer Funktion ein komplettes
Strukturobjekt zur Verfügung stellst und du die Kosten zur Erzeugung
einer Kopie des Strukturobjektes nicht tragen willst oder kannst. In
allen andern Fällen brauchst du an dieser Stelle keinen Pointer.