返回指向函数指针的函数的N个指针数组

Vij*_*jay 16 c types

这是在接受采访时向我询问的!我真的很困惑

  • 如何声明一个指向函数的N个指针数组,返回指向函数的指针,返回指向字符的指针

有人可以帮忙吗?

Joh*_*ode 33

Typedef是为了wusses.这是一个简单,机械的方法来计算毛茸茸的声明:

          a                 -- a
          a[N]              -- is an N-element array
         *a[N]              -- of pointers
        (*a[N])()           -- to functions
       *(*a[N])()           -- returning pointers
      (*(*a[N])())()        -- to functions
     *(*(*a[N])())()        -- returning pointers
char *(*(*a[N])())()        -- to char.  
Run Code Online (Sandbox Code Playgroud)

所以,答案就在附近char *(*(*a[N])())();.我说"在附近",因为它从未指定函数采用的参数.

这是一个令人讨厌的面试问题(丑陋的类型是真正罕见的IME),但它确实让面试官知道你对声明者的理解程度.无论是那个还是他们都很无聊,只是想看看他们是否可以让你的大脑发霉.

编辑

大多数人都建议使用typedef.我建议使用typedef的唯一一次是该类型是否真的不透明(即,不是由程序员直接操作,而是传递给API,有点像FILE类型).否则,如果程序员想要直接操作该类型的对象,那么IME最好在声明中提供所有可用的信息,尽管它可能很丑陋.例如,像

 NameFuncPickerPointer a[N];
Run Code Online (Sandbox Code Playgroud)

没有给我如何实际使用的信息 a[i].我不知道它a[i]是可调用的,还是它返回的内容,或它应该采取什么参数(如果有的话),或者其他任何东西.我得去寻找typedef

typedef char *NameFunc();
typedef NameFunc *NameFuncPicker();
typedef NameFuncPicker *NameFuncPickerPointer;
Run Code Online (Sandbox Code Playgroud)

从那个难题出来,如何编写实际调用其中一个函数的表达式.使用"裸",非typedef的声明,我立即知道调用的结构是

char *theName = (*(*a[i])())();
Run Code Online (Sandbox Code Playgroud)


Chr*_*her 6

typedef char* (* tCharRetFunc)();
typedef tCharRetFunc (* tFuncRetCharFunc)();

tFuncRetCharFunc arr[N];
Run Code Online (Sandbox Code Playgroud)