【问题标题】:function pointer : why is (*fptr)(6,7) same as (fptr)(6,7) , if the function is add(int , int ) [duplicate]函数指针:为什么 (*fptr)(6,7) 与 (fptr)(6,7) 相同,如果函数是 add(int , int ) [重复]
【发布时间】:2014-08-21 21:49:38
【问题描述】:

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.    

【问题讨论】:

  • 请发布正确的代码来演示该问题。你写的是两种不同的类型(一种是函数类型,另一种是函数指针类型)。并且题名与题体不同。
  • 现在完全颠覆你的想法:(****fptr)(6, 7) 呢?
  • @Ayush:“改进”是一个强词......
  • 您不需要取消引用,因为函数和指向函数的指针都作为指针处理。

标签: c function pointers


【解决方案1】:

说明

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

参考文献

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

6.5.3.2 地址和间接运算符

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

...

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

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

【讨论】:

    【解决方案2】:

    6.5.2.2 函数调用 5

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

    【讨论】:

    • 这对初学者来说不是很有用...
    • 我认为这是演出的理由。
    猜你喜欢
    • 2013-05-10
    • 1970-01-01
    • 2017-06-01
    • 2021-05-10
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多