c/c++语言开发共享我怎样才能理解这个C类型声明?

double (*bar(int, double(*)(double,double[])))(double); 

在回顾演讲幻灯片时,我找到了一个留给学生的练习:

用简单的英语,这个C声明中的bar类型是什么?

帮我一步。 我甚至不知道从哪里开始,除了有些东西最终会返回双倍。

    这个答案是通过使用螺旋规则的能力给你的。 能够通过从未知元素开始并阅读它来理解复杂的表达式(首先解决括号中的事物)。 阅读代码时非常有用的技巧。

      bar - bar bar() - is a function bar(int, ) - which takes an int... bar(int, (*)()) - and a function pointer bar(int, double(*)()) - which returns a double bar(int, double(*)(double, )) - and takes a double... bar(int, double(*)(double, double[])) - and an array of doubles (*bar(int, double(*)(double, double[]))) - and returns a pointer (*bar(int, double(*)(double, double[])))() - to a function (*bar(int, double(*)(double, double[])))(double) - taking a double double(*bar(int, double(*)(double, double[])))(double) - which returns a double 

    这是一个艰难的方式…当然有网站使这更容易,例如cdecl网站; 但即使你无法访问互联网,能够阅读代码也是一件好事。

    如果您不确定您是否可以使用K&R中描述的cdecl实用程序,如下所示:

     $ cdecl Type `help' or `?' for help cdecl> explain double (*bar(int, double(*)(double,double[])))(double); declare bar as function (int, pointer to function (double, array of double) returning double) returning pointer to function (double) returning double 

    所以bar是一个函数,它接受一个int和一个指向函数的指针,该函数接受doubledouble[]并返回一个double

     double(*)(double,double[])) 

    并且bar返回一个指向另一个函数的指针,该函数接受一个double并返回一个double

     double(*)(double) 

      以上就是c/c++开发分享我怎样才能理解这个C类型声明?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560116.html

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐