首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数指针表达式

函数指针表达式
EN

Stack Overflow用户
提问于 2018-01-13 20:53:55
回答 4查看 599关注 0票数 11

所以我得到了下面的表达式:

代码语言:javascript
复制
int (*f1(int(*a)(int, int))) (int, int);

我试着去理解它,但是它让人迷惑。我发现"a“是一个指向带有两个参数(int,int)的函数的指针。那么f1看起来像是指向另一个接受2个整型参数的函数的指针。但是让我困惑的是f1和a的关系。

有人能给我一些提示或正确地解释上面的表达式是做什么的吗?

EN

回答 4

Stack Overflow用户

发布于 2018-01-13 21:01:17

它将f1声明为只有一个名为a的参数的函数。参数的类型和返回类型都是“指向函数的指针,其中有两个int参数返回int”。

下面是解析它的方法:

代码语言:javascript
复制
// f1 is...
      f1
// ...a function...
      f1(                 )
// ...with a single parameter called `a`, which is...
      f1(     a           )
// ...a pointer to...
      f1(    *a           )
// (skip parentheses)
      f1(   (*a)          )
// ...a function...
      f1(   (*a)(        ))
// ...with two `int` parameters...
      f1(   (*a)(int, int))
// ...returning an `int`. The `f1` itself returns...
      f1(int(*a)(int, int))
// ...a pointer to...
     *f1(int(*a)(int, int))
// (skip parentheses)
    (*f1(int(*a)(int, int)))
// ...a function...
    (*f1(int(*a)(int, int))) (        )
// ...with two int parameters...
    (*f1(int(*a)(int, int))) (int, int)
// ...returning an `int`.
int (*f1(int(*a)(int, int))) (int, int)
票数 10
EN

Stack Overflow用户

发布于 2018-01-13 21:04:49

这是函数f1的声明,它接受一个参数a-一个指向函数的指针,该函数接受2个int作为参数并返回一个int -并返回一个指向相同类型函数的指针。

使用typedef将其分解:

代码语言:javascript
复制
typedef int(*t)(int, int);

t f1(t a); //this is your declaration
票数 6
EN

Stack Overflow用户

发布于 2018-01-13 21:54:27

C中的技巧是将声明读作表达式。这就是使C语言优雅的著名的对称性。

如何阅读?遵循运算符优先规则:

如果我取消引用变量a;

  • (*a)(int,int):,然后用两个integers;

  • int (*a)(int,int):调用它,那么我会得到一个整数;

因此,a是一个指向函数的指针,该函数接受两个整数作为参数,并返回一个int

然后:

  1. f( int(*a)(int,int) )如果我用参数a;
  2. *f( int(*a)(int,int) )调用f,然后取消引用result;
  3. (*f( int(*a)(int,int) )(int,int),然后以2 int作为argument
  4. int (*f( int(*a)(int,int) )(int,int)调用这个结果,我会得到一个int

所以f是一个以a为参数的函数,返回一个指向以两个int为参数的函数的指针,并返回一个int。因此,f返回类型与其参数返回类型相同。它本可以更简单:

代码语言:javascript
复制
using ftype = int(*)(int,int);
ftype f( ftype a);
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48240050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档