在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.
答案 0 :(得分:1)
C没有函数对象,因此取消引用函数指针是没有意义的。因此,当一个函数指针被解除引用时,它会(有一些例外)立即转回一个指向函数的指针。
n1570(当前C标准的最终公开草案):
6.5.3.2地址和间接运算符
- 一元
醇>*
运算符表示间接。如果操作数指向函数,则结果为函数指示符; [...]
...
6.3.2.1左值,数组和函数指示符
- 函数指示符是具有函数类型的表达式。除非它是
醇>sizeof
运算符,_Alignof
运算符或一元&
运算符的操作数,否则类型为''函数返回类型''的函数指示符将转换为表达式类型为''指向函数返回类型的指针''。
答案 1 :(得分:0)
6.5.2.2函数调用5
如果表示被调用函数的表达式具有类型指针 函数返回一个对象类型,函数调用表达式有 与该对象类型相同的类型,并将值确定为 在6.8.6.4中规定。