En el siguiente código:y operadora opcional en función de asignación de puntero
/* mylog.c */
#include <stdio.h>
#include <stdlib.h> /* for atoi(3) */
int mylog10(int n)
{
int log = 0;
while (n > 0)
{
log++;
n /= 10;
}
return log;
}
int mylog2(int n)
{
int log = 0;
while (n > 0)
{
log++;
n >>= 1;
}
return log;
}
int main(int argc, const char* argv[])
{
int (*logfunc)(int); /* function pointer */
int n = 0, log;
if (argc > 1)
{
n = atoi(argv[1]);
}
logfunc = &mylog10; /* is unary '&' operator needed? */
log = logfunc(n);
printf("%d\n", log);
return 0;
}
en la línea
logfunc = &mylog10;
me he dado cuenta de que el unario &
(dirección) del operador es opcional, y la el programa se compila y se ejecuta de la misma manera con o sin él (en Linux con GCC 4.2.4). ¿Por qué? ¿Es esto un problema específico del compilador, o quizás dos estándares de lenguaje diferentes aceptados por el compilador? Gracias.
BTW- ¿significa esto que un puntero a la función "se comporta de la misma manera" como se comportaría una referencia a la función? – Kos
@Kos: Puede parecer que se comporta de la misma manera en el nivel del código fuente, aunque la similitud es puramente superficial: la mecánica del lenguaje abstracto subyacente es bastante diferente. Sin embargo, si profundizas aún más y observas la mecánica a nivel de máquina, verás que parecen ser la misma otra vez. – AnT