c/c++语言开发共享凌乱的函数指针解释

我偶然遇到以下函数指针。

char (*(*x())[])(); 

它看起来像以下格式的函数指针数组,但我看不出f – >(* x())的含义。 如何解释这个凌乱的函数指针?

 char (*f[])(); 

添加

在John Bode的帮助下,我举了一个例子如下。

 #include  char foo() { return 'a'; } char bar() { return 'b'; } char blurga() { return 'c'; } char bletch() { return 'd'; } char (*gfunclist[])() = {foo, bar, blurga, bletch}; char (*(*x())[])() { static char (*funclist[4])() = {foo, bar, blurga, bletch}; return &funclist; } int main() { printf("%cn",gfunclist[0]()); char (*(*fs)[4])(); fs = x(); printf("%cn",(*fs)[1]()); } 

我可以得到预期的结果。

  smcho @ prosseek temp2> ./a.out  一个  b 

而且,您可以在这里找到更好的实现。

    我的一般程序是在声明中找到最左边的标识符,然后解决问题,在*之前记住[]()绑定(即, *f()通常被解析为*(f())*a[]通常被解析为*(a[]) )。

    所以,

      x -- x x() -- is a function *x() -- returning a pointer (*x())[] -- to an array *(*x())[] -- of pointers (*(*x())[])() -- to functions char (*(*x())[])(); -- returning char 

    这种野兽在实践中会是什么样子?

     char foo() { return 'a'; } char bar() { return 'b'; } char blurga() { return 'c'; } char bletch() { return 'd'; } /** * funclist -- funclist * funclist[] -- is an array * *funclist[] -- of pointers * (*funclist[])() -- to functions * char (*funclist[])() -- returning char */ char (*funclist[])() = {foo, bar, blurga, bletch}; 

    表达式&funclist将返回指向数组的指针,所以

     char (*(*x())[])() { return &funclist; } 

     char (*(*x())[])(); 

    x is a function returning pointer to array of pointer to function returning char

     char (*f[])(); 

    在这种情况下, f is an array of pointer to function returning char

    使用左右规则将是有益的。

     cdecl> explain char (*(*x())[])(); declare x as function returning pointer to array of pointer to function returning char 

    一些typedef使它更清晰:

     typedef char (*charfunc_t)(); 

    这将charfunc_t定义为一个指向函数的指针,该函数没有返回char参数。

     typedef charfunc_t funcarr_t[]; 

    funcarr_t是这样的函数指针的数组。

    x是一个返回指向这样一个数组的指针的函数,它现在可以这样声明:

     funcarr_t* x(); 

    访问此站点以帮助您理解c声明( cdecl.org ),如果您输入上述内容,它将告诉您这一点

    声明x作为函数返回指向函数返回char的指针数组的指针

    需要了解更多c/c++开发分享凌乱的函数指针解释,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享凌乱的函数指针解释相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

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

      ctvol管理联系方式QQ:251552304

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

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐