Problem mit einfach-verketteter Liste
-
supertux schrieb:
Inwiefern reduziert das die Komplexitate? Welche Komplezitat?
Die Sichtbare. Genauso wenig wie es sinnvoll ist, diese stets zu verstecken, ist es praktisch, wenn die Sprache kein Mittel bereitstellt, sie an sinnvollen Stellen zu verdecken. C++ ermöglicht die Wahl (man kann ja immer noch per Zeiger übergeben und ich bin nicht der Ansicht, dass eine Variante der anderen gegenüber generell überlegen ist) C tut das nicht.
Zunächst einmal ist die Frage, ob ein Parameter verändert wird oder nicht, nicht primär eine der Funktionssignatur (die nur Mittel zum Zweck ist), sondern eine der Funktionalität. Selbst wenn dir die konkrete Signatur eine Funktion entfallen ist, wirst du sie kaum aufrufen, ohne zu wissen was tut (wenn das vergessen wurde, hilft dir auch ein Zeigerargument nicht). Ist eine Funktion sinnvoll definiert worden, ist ein veränderliches Argument aber stets eine notwendige Folge (oder nicht), es wird also durch die Funktionalität in aller Regel impliziert (natürlich gibt es für alles und jedes Ausnahmen, wenn man darauf hinweisen muss, kann man ja z.B. Zeiger verwenden...).
Andererseits ist es in den Fällen, in denen diese Frage absolut offensichtlich ist, oft schlicht überflüssig (und in Hinblick auf den aufrufenden Code oft auch schlich wenig relevant), noch einmal beim Funktionsaufruf mit & darauf hinzuweisen lenkt dann also vom Wesentlichen ab. Zudem leiden C und C++ bereits unter einer Syntax mit viel zu vielen Sonderzeichen.
Um es kurz zu fassen, Referenzargumente sind natürlich kein Allheilmittel, aber sie können nützlich sein und C++ lässt einem die Wahl, ob man sie verwenden will, und das ist eine gute Sache. Schließlich ging man beim Design beider Sprachen von umsichtigen Programmierern aus, denen man solche Entscheidungen überlassen kann.Edit: ups, jetzt hab ich doch im falschen Forum geantwortet... also einfach ignorieren, wenn kein Interesse besteht,
-
camper schrieb:
supertux schrieb:
Inwiefern reduziert das die Komplexitate? Welche Komplezitat?
Die Sichtbare. Genauso wenig wie es sinnvoll ist, diese stets zu verstecken, ist es praktisch, wenn die Sprache kein Mittel bereitstellt, sie an sinnvollen Stellen zu verdecken. C++ ermöglicht die Wahl (man kann ja immer noch per Zeiger übergeben und ich bin nicht der Ansicht, dass eine Variante der anderen gegenüber generell überlegen ist) C tut das nicht.
zugegeben habe ich ein Problem damit, die (von dir genannte) sichtbare Komplexitaet ueberhaupt zu erkennen. Ich bin kein C++ Guru, deswegen kann es sein, dass mir die Erfahrung von Referenzen vs. Zeiger fehlt. Gerade am
apppend
Beispiel sehe ich keine "sichtbare" Komplexitaet seitens C. Du schreibst auch "noch einmal beim Funktionsaufruf mit & darauf hinzuweisen lenkt dann also vom Wesentlichen ab", wie ist das zu verstehen? Ablenken, vowor? Irgendwie kann ich da die Argumentation nicht verstehen.
-
supertux schrieb:
lippoliv schrieb:
Keine... ist genau das selbe... Ausser das du beim Funktionsaufruf nicht "&variable" schreiben musst (falls es noch kein pointer ist) sondern direkt schreibst "variable"...
stimmt, dass du bei einer Referenz wuerde man den Variablennamen ohne & schreibst. Und wo liegt darin der Vorteil? Ich sehe darin eher einen Nachteil (siehe unten)
Nein ich bin C-ler... ich schreibe das und.
Ich stimme dir zu, ich kennzeichne lieber nochmal die Variable so, das ich beim Funktionsaufruf sehe, welche verändert wird, anstatt einfach blind die Variablen in die Funktionen zu schmeißen und zu schauen was bei rauskommt...