Was? Das wegen der Groß-/Kleinschreibung? Spielt doch keine Rolle. Die Variable ist bei ihm "Zahl". Der Parameter kann ruhig anders heißen. Ist bei ihm ja auch "sub_zahl"
hk007:
Dachte ich muss innerhalb der Funktion eine andere Bezeichnung nehmen.
Nein. Ist vielleicht etwas verwirrend, aber die lokale Variable überdeckt die globale wenn der Name gleich ist.
#3 passt. Es ist natürlich Pseudo-Code, aber korrekt. Wie kommt ihr jetzt darauf dass der Parameter-Name eine Rolle spielt? Der ist vollkommen egal. Nur weil das eine Referenz ist, verhält sich das nicht anders als jede andere Funktion.
Ich war immer der Meinung, dass die Variable in der Funktion nicht genauso heissen darf, wie die globale.
Habe sie daher immer etwas anders genannt.
Auch aus Gründen des besseren Verständniss, wenn ich meine Programmkonstrukte nach längere Zeit wieder angeschaut habe.
Aber habe es gerade probiert. Software läuft in beiden Varianten.
Wird dann durch das int& bestimmt, das der beim Aufruf übergebene Parameter (Zahl) mit dem "überschrieben" wird, was in der Funktion nach dem int& steht ?
Serenifly:
Ob es klug ist, ist eine andere Frage. Wenn dich das verwirrt dann lass es sein.
Ich seh das auch noch aus einem anderen Gesichtspunkt. Eine Funktion kann ich ja öfters aufrufen. Da habe ich beim Aufruf verschiedene Übergabeparameter. Also macht es imho Sinn, die lokale Variable funktionsbezogen zu benennen.
Referenzen und Zeiger sind ein Unterschied, wenn ich mal ein wenig verwirren darf:
In C gibt es nur Zeiger:
int zahl;
void foo ( int * px ) { (*px)++; }
void loop() {
foo (&zahl); // erhöht zahl bei jedem Aufruf
}
foo erwartet als Parameter den Zeiger auf ein int ( also ein int* ), der Wert auf den der Zeiger zeigt ( *px ) wird dann verändert.
Der Funktion wird explizit die Adresse der Variablen ( &zahl ) übergeben.
in C++ gibt es auch Referenzen. Da sieht das so aus:
int zahl;
void foo (int& rx) { rx++; } // rx ist eine Referenz auf ein int, kein Zeiger.
void loop() {
foo (zahl);
}
Das sieht einfacher aus, macht effektiv dasselbe. Man kann dem Funktionsaufruf foo (zahl); halt nicht direkt ansehen, dass da nicht der Wert der Variablen übergeben wird. Aber eigentlich muss man sowieso die Funktions-Signatur kennen ( welche Parameter mit welchen Datentypen ) um sie verwenden zu können.