通过使用“函数指针”来调用函数的逻辑

时间:2019-03-02 19:38:46

标签: c arrays pointers function-pointers pointer-to-pointer

假设有一个声明为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}}如何相同?有没有什么公式可以理解这一点,就像在“指向数组的指针”的情况下一样?

1 个答案:

答案 0 :(得分:4)

ANSI C之前的版本要求您在调用函数指针之前先对其进行引用。

当C变得标准化时,人们发现除了调用它以外,您对函数指针的处理不多(指针算术对函数指针没有意义-函数指针指向汇编指令块的长度其中的内容取决于具体的函数,而不取决于函数的类型。这也是您无法使用函数数组的原因),因此f(x)等效于(*f)(x)(甚至是{{1} }或(****f)(x)以及其他各种组合,只要(**&**f)(x)是一个函数或一个间接函数指针(如果它是指向函数指针的指针,则至少需要一个{{1} }等等,以实现乘法间接指针。