Das gegebene Beispiel ist nur über 'Call-by-Wert' und deshalb das gedruckte Wert ist 20. Im Falle von 'Aufruf nach Wert-Ergebnis' wird der vom Aufrufer angegebene aktuelle Parameter in den formalen Parameter des Aufrufers kopiert; Dann , wenn die Funktion der formalen Parameter ausgeführt wird, könnte überall im Funktionskörper modifiziert werden, aber nur, wenn die Funktion der modifizierten formalen Parameter austritt, wird dann zurück an den Aufrufer kopiert. Im Fall von ‚call by reference‘ ein ‚Alias‘ zwischen den formalen und tatsächlichen Parameter und jede Änderung formalen Parameter wird an den Aufrufer Parameter reflektiert erstellt wird.
Nachdem Sie den Code in einer Sprache, die 'Call-by-Value-Ergebnis'
void test(IN OUT int c; REF int d)
{
printf ("a: %d b: %d c: %d d: %d\n", a,b,c,d);
a = 0; b = 9; c = 4; d = 6;
printf ("a: %d b: %d c: %d d: %d\n", a,b,c,d);
}
void main(void)
{
int a = 5, b = 7;
test(a,b);
printf ("a: %d b: %d\n",a,b);
}
Die Ergebnisse dieser Unterstützung sollte
a: 5 b: 7 c: 5 d: 7
a: 0 b: 6 c: 4 d: 6 // d and b are aliases, so b=9 is modified by d = 6
a: 4 b: 6 // a replaced with value of c on function exit.
So in Ihrem Fall sein: call by value
a = 5 bei Eingabe der Funktion
x = 5 + 10 = 15
dann haben wir 'a' als globale Variable
a = 5 + x = 5 + 15 = 20
dann auf Druck a = 20
bei Aufruf durch wert- Ergebnis, wenn die Funktion Eingabe
x = 5 + 10 = 15
a = 5 + 15 = 20
aber Wenn die Funktion zurückgegeben wird, wird der Wert, wenn x auf 'a' kopiert wird, wobei das Ergebnis a = 15 ist, dann der Druck 15
Der Code, den Sie vorgestellt haben, ist nicht C. –
Nur um hinzuzufügen, was @SteveSummit sagte ... gibt es kein 'procedure' Schlüsselwort in C. – Yetti99
mein Fehler, nur ein falsches Tag @SteveSummit – bkennedy