函数指针:为什么(* fptr)(6,7)与(fptr)(6,7)相同,如果函数是add(int,int)

function pointers

如果函数指针被赋值为添加函数(*fptr)(int a, int b)为什么(*fptr)(int a, int b)(fptr)(int a, int b)相同?

 int (*fptr)(int ,int) = add; while add(int a , int b) returns sum of two numbers. 

说明

C没有函数对象 ,因此取消引用函数指针是没有意义的。 因此,当一个函数指针被解除引用时,它(有一些例外)立即转回到一个指向函数的指针。

参考

n1570 (当前C标准的最终公开草案):

6.5.3.2地址和间接运营商

  1. 一元*运算符表示间接。 如果操作数指向函数,则结果是函数指示符 ; […]

6.3.2.1左值,数组和函数指示符

  1. 函数指示符是具有函数类型的表达式。 除非它是sizeof运算符, _Alignof运算符或一元&运算符的操作数,否则类型为”函数返回类型”的函数指示符将转换为类型为” 指向函数返回类型指针 ”的表达式。

6.5.2.2函数调用5

如果表示被调用函数的表达式具有返回对象类型的函数的类型指针,则函数调用表达式与该对象类型具有相同的类型,并且具有根据6.8.6.4中指定的值确定的值。