En el programa C a continuación, no entiendo por qué buf [0] = 'A' después de llamar a foo. ¿No está haciendo foo by-value?C Programación - Pase por referencia
#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;
}
de salida:
before foo | buf[0] = 'B'
after foo | buf[0] = 'A'
Gracias a todos, especialmente a James, por la respuesta. ¿Por qué alguien usaría la llamada por valor si no cambia el valor de la entrada? –
Porque puede necesitar un valor de algo pero no necesita cambiarlo. – Javier
@Kevin: Porque la función solo puede necesitar el valor. Las funciones sin efectos secundarios son más fáciles de razonar (no es que llegue muy lejos usando C como un lenguaje de programación funcional), y pasar por el valor elimina los posibles efectos secundarios. –