【问题标题】:In C / C++, What would int (*f) (float *) create? [duplicate]在 C / C++ 中,int (*f) (float *) 会创建什么? [复制]
【发布时间】:2016-05-13 16:32:22
【问题描述】:

我有点困惑...是否有人可以识别评估顺序以及此处实际声明的内容,也许是指针和我们期望使用这些找到的类型?

书面解释也足够了,一切都会很棒。真的是任何你觉得你可以充分解释它的作用的方法都会很棒!

这在 C/C++ 中有什么作用?

int (*f) (float *);

【问题讨论】:

标签: c++ c declaration typecasting-operator


【解决方案1】:

它声明了一个函数指针f指向一个函数,该函数接受一个指向float的指针并返回一个int。

如果没有 *f 周围的括号,您将声明一个函数 f,它接受一个指向 float 的指针并返回一个指向 int 的指针。

【讨论】:

    【解决方案2】:

    cdecl(C 胡言乱语 ↔ 英语)是这样解释的

     int (*f) (float *);
    

    将 f 声明为返回 int 的函数指针(指向浮点数的指针)

    如果您不熟悉该语言,此服务对于解释基本语法非常有用。


    好吧,措辞可以改进一点:

    将 f 声明为函数指针,使用指向 float 参数的指针并返回 int

    【讨论】:

      【解决方案3】:

      f 是一个函数指针。换句话说,f 是一个指向函数的指针,该函数接受 float*(指向 float 的指针)并返回 int

      这是一个例子:

      假设你有一个类似的函数:

      int function(float* fltPtr)
      {
          // ...
          return SOME_VALUE;
      }
      

      然后,你可以使用

      int (*f) (float *) = &function; // `&` is optional
      

      使函数指针f指向function的地址。在此之后,您可以使用

      float flt = 0.5f;
      int retVal = f(&flt); /* Call the function pointed to by `f`, 
                               passing in the address of `flt` and
                               capture the return value of `function` in `retVal` */
      

      调用函数。上面的代码相当于

      float flt = 0.5f;
      int retVal = function(&flt); /* Call the function `function`, 
                                      passing in the address of `flt` and
                                      capture the return value of `function` in `retVal` */
      

      【讨论】:

      • 为什么function 的语法高亮是蓝色的?
      猜你喜欢
      • 2018-01-04
      • 2017-03-13
      • 2019-06-19
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      • 2014-03-17
      • 2019-11-08
      • 2018-05-05
      相关资源
      最近更新 更多