这是什么意思char(*(*a [4])())[5]?

Abh*_*eet 7 c++

嗨,我在"用c ++测试你的技能"中遇到了这个问题.

请让我知道一个例子意味着什么?

编辑部分:对于额外的括号,编辑和删除,对不起.

char (*(*a[4])())[5]
Run Code Online (Sandbox Code Playgroud)

Dev*_*lar 25

遵循螺旋规则(由chris链接),并以标识符开头:

a
Run Code Online (Sandbox Code Playgroud)

...是... ...

a[4]
Run Code Online (Sandbox Code Playgroud)

......一阵4 ...

*a[4]
Run Code Online (Sandbox Code Playgroud)

......指向......

(*a[4])()
Run Code Online (Sandbox Code Playgroud)

......没有参数的功能......

*(*a[4])()
Run Code Online (Sandbox Code Playgroud)

...返回指针...

(*(*a[4])())[5]
Run Code Online (Sandbox Code Playgroud)

......五个数组......

char (*(*a[4])())[5]
Run Code Online (Sandbox Code Playgroud)

...字符.

旁注:给建筑师提供一个很好的打扮,然后找到编写这段代码的程序员,没有评论解释它并给一个很好的打扮.如果这是作为家庭作业给你的,告诉老师他应该指示你如何使用cdecl,或者如何设计代码看起来不像疯子潦草,而不是浪费你的时间有了这个.


Bla*_*ace 16

我通过删除我认为是一个额外的右括号并将结果粘贴到cdecl中作弊.

declare a as array 4 of pointer to function returning pointer to array 5 of char

  • @Abhineet,我知道什么是数组,函数指针,函数返回值和指向字符数组的指针,但我想不出一个使用这种语言特性组合的实际例子. (6认同)

Ret*_*nja 13

另一个例子......除了一个例子之外,什么都不做.

#include <iostream>

typedef char stuff[5];
stuff stuffarray[4] = { "This", "Is", "Bad", "Code" };

stuff* funcThis()   { return &(stuffarray[0]); }
stuff* funcIs()     { return &(stuffarray[1]); }
stuff* funcBad()    { return &(stuffarray[2]); }
stuff* funcCode()   { return &(stuffarray[3]); }

int main()
{
    char (*(*a[4])())[5] = { funcThis, funcIs, funcBad, funcCode };
    for(int i = 0; i < 4; ++i)
    {
        std::cout << *a[i]() << std::endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 我完全可以和cout一起使用它!:) typedef是因为我无法弄清楚如何在没有它的情况下声明函数. (4认同)

acr*_*075 8

这是一个例子......

#include <stdio.h>

char a[5] = "abcd"; 
char b[5] = "bcde"; 
char c[5] = "cdef"; 
char d[5] = "defg"; 

char (*f1())[5] { return &a; }
char (*f2())[5] { return &b; }
char (*f3())[5] { return &c; }
char (*f4())[5] { return &d; }

int main()
{
        char (*(*a[4])())[5] = { &f1, &f2, &f3, &f4 };
        for (int i = 0; i < 4; i++)
                printf("%s\n", *a[i]());
        return 0;
}
Run Code Online (Sandbox Code Playgroud)