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

时间:2014-07-01 10:54:15

标签: c function pointers

function pointers

如果将函数指针指定为添加函数,为什么(*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.    

2 个答案:

答案 0 :(得分:1)

说明

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

参考

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

  

6.5.3.2地址和间接运算符

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

...

  

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

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

答案 1 :(得分:0)

6.5.2.2函数调用5

  

如果表示被调用函数的表达式具有类型指针   函数返回一个对象类型,函数调用表达式有   与该对象类型相同的类型,并将值确定为   在6.8.6.4中规定。