Im unten stehenden C-Programm verstehe ich nicht, warum buf [0] = 'A', nachdem ich foo aufgerufen habe. Ist nicht foo Pass-by-Value?C Programmierung - Pass-by-Referenz
#include <stdio.h>
#include <stdlib.h>
void foo(char buf[])
{
buf[0] = 'A';
}
int main(int argc, char *argv[])
{
char buf[10];
buf[0] = 'B';
printf("before foo | buf[0] = %c\n", buf[0]);
foo(buf);
printf("after foo | buf[0] = %c\n", buf[0]);
system("PAUSE");
return 0;
}
Ausgang:
before foo | buf[0] = 'B'
after foo | buf[0] = 'A'
Danke an alle, besonders James, für die Antwort. Warum sollte jemand Call by Value verwenden, wenn er den Wert des Inputs nicht ändert? –
Weil Sie einen Wert von etwas benötigen, aber nicht ändern müssen. – Javier
@Kevin: Weil die Funktion nur den Wert benötigt. Funktionen ohne Nebenwirkungen sind leichter zu verstehen (nicht dass Sie mit C als funktionaler Programmiersprache sehr weit kommen würden), und die Weitergabe nach Werten entfernt mögliche Nebenwirkungen. –