Por qué scanf debe tomar la dirección del operador

Por qué scanf debe tomar la dirección del operador

Debido a que C solo tiene parámetros de "paso por valor", entonces para pasar una 'variable' para poner un valor, debe pasar su dirección (o un puntero a la variable).


scanf no toma "la dirección del operador (&)". Se necesita un puntero . La mayoría de las veces, el puntero a la variable de salida se obtiene utilizando el operador de dirección en la llamada scanf, por ejemplo,

int i;
scanf("%i", &i);
printf("number is: %d\n", i);

Pero esa no es la única manera de hacerlo. Lo siguiente es igual de válido:

int *iPtr = malloc(sizeof(int));
scanf("%i", iPtr);
printf("number is: %d\n", *iPtr);

De igual manera podemos hacer lo mismo con el siguiente código:

int i;
int *iPtr = &i;
scanf("%i", iPtr);
printf("number is: %d\n", i);

Porque necesita la dirección para colocar el valor que lee. Si declara su variable como un puntero, el scanf no necesitará el & .