Предположим, что есть указатель f
, объявленный на некоторую функцию, скажем, int foo(int)
как:
int (*f)(int)=foo;
При упоминании о вызове функции foo()
с помощью этого понтера, который передается в качестве аргумента какой-либо другой функции. Я наткнулся на заявление о том, что оба
y=(*f)(x)
и
y=f(x)
одинаковы в C и вызывает функцию foo()
....(x и y имеют тип int).
Для массивов я знаю, что если p является указателем на любой массив a.
p[i]=*(p+i)=*(&a[0]+i)=*(a+i)=a[i]
.
Так что писать p[i]
и *(p+i)
— одно и то же. Но я не понимаю логики для случая «указатель на функцию». Чем отличаются y=(*f)(x)
и y=f(x)
? Есть ли какая-нибудь формула, чтобы понять это, как в случае «указателя на массивы»?
pointer to function
. См. n1570: 6.5.2.2 Вызовы функций 1 Выражение, обозначающее вызываемую функцию 92), должно иметь указатель типа на функцию, возвращающую void или возвращающую полный тип объекта, отличный от типа массива. - person EOF   schedule 02.03.2019