Предположим, есть указатель 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)
одинаковы?Есть ли какая-нибудь формула, чтобы понять это так, как она есть в случае «указателя на массив»?