В следующем коде:
/* 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;
}
в строке
logfunc = &mylog10;
Я заметил, что унарный оператор &
(адрес) является необязательным, и программакомпилируется и выполняется одинаково с или без него (в Linux с GCC 4.2.4).Зачем?Это специфичная для компилятора проблема, или, может быть, два разных языковых стандарта принимаются компилятором?Спасибо.