Zuerst wird das zweite Beispiel, das Sie ausgeben wird um die andere Art und Weise geschrieben: „21“ innerhalb der Funktion und „20“ in dem Hauptkörper - testen Sie es selbst.
Jetzt für die Exlanation ... Um mit zu beginnen, wird der Inkrementbetrag immer 1 sein, weil Sie einen expliziten Betrag in die Funktion nicht übergeben.
Im ersten Beispiel weisen Sie der Variablen einen Wert zu, übergeben diese Variable dann per Referenz an eine Funktion und in der Funktion erhöhen Sie den Wert. Die Funktion erhält den Parameter "20", erhöht den Wert um 1 und gibt das Ergebnis "21" aus. Nachdem die Funktion zurückgegeben wurde, wird der Wert (wie er durch Verweis übergeben wurde) jetzt erhöht - und eine weitere "21" wird gedruckt.
Im zweiten Beispiel weisen Sie 20 auf Ihre Variable und gelangen in die Funktion das Ergebnis dieser Zuordnung. Das Ergebnis wird 20 sein, aber es wird ein anderer Speicherort sein. Vom Standpunkt der Funktion erhält es nur einen By-Ref-Parameter mit dem Wert 20, inkrementiert es und gibt das Ergebnis aus - daher erhalten Sie "21". Wenn die Funktion zurückkehrt, drucken Sie dann den Wert Ihrer Variablen - die niemals in die Funktion übergeben wurde (und daher nie erhöht wurde) - daher wird "20" gedruckt.
Formatieren/einrücken Ihren Code, um es leicht lesbare –
was Sie testen wollen, und was sind Sie nicht immer? – Nishant