假设有一个声明为int foo(int)
的指针int (*f)(int)=foo;
声明为:
foo()
在提到使用此ponter调用y=(*f)(x)
函数时,该ponter作为参数传递给其他函数。
我碰到一个声明,说
y=f(x)
和
foo()
在C语言中相同,并调用函数p[i]=*(p+i)=*(&a[0]+i)=*(a+i)=a[i]
....(x和y为int类型)。
对于数组,我知道如果p是指向任何数组a的指针。
p[i]
。
因此写*(p+i)
和y=(*f)(x)
是同一回事。但是我不会得到“指针功能”案例的逻辑。 y=f(x)
和{{1}}如何相同?有没有什么公式可以理解这一点,就像在“指向数组的指针”的情况下一样?
答案 0 :(得分:4)
ANSI C之前的版本要求您在调用函数指针之前先对其进行引用。
当C变得标准化时,人们发现除了调用它以外,您对函数指针的处理不多(指针算术对函数指针没有意义-函数指针指向汇编指令块的长度其中的内容取决于具体的函数,而不取决于函数的类型。这也是您无法使用函数数组的原因),因此f(x)
等效于(*f)(x)
(甚至是{{1} }或(****f)(x)
以及其他各种组合,只要(**&**f)(x)
是一个函数或一个间接函数指针(如果它是指向函数指针的指针,则至少需要一个{{1} }等等,以实现乘法间接指针。