Почему компилятор говорит, что это не указатель:
#include <stdio.h>
double f(){ return 1.2; }
int main(){
int i=0;
double d =f()[0]; //f() is not pointer? it should be
printf("%i\n",d);
}
ошибка:
subscripted value is neither array nor pointer nor vector
double d =f()[0];
Но я объявил указатель на функцию, а затем использовал имя функции , тогда он станет указателем:
#include <stdio.h>
int op(int (*op)(int,int), int a, int b){ return op(a,b); }
int add(int a, int b){ return a+b; }
int main(){
printf("%i\n",op(add, 1, 2)); //here: add() will magically become pointer, different context
}
Итак, в первом случае я хотел разыменовать функцию, в надежде, что имя функции - указатель (и поэтому разграничение разрешено ). Во втором примере указатель на функцию объявлен с указателем, поэтому функция add
будет преобразована в указатель (сравните с printf("%i\n",op(&add,1,2))
) также будет работать. Так почему проблема с первым?