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

时间:2010-02-03 14:32:00

标签: c types

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

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

有人可以帮忙吗?

6 个答案:

答案 0 :(得分: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.  

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

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

修改

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

 NameFuncPickerPointer a[N];

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

typedef char *NameFunc();
typedef NameFunc *NameFuncPicker();
typedef NameFuncPicker *NameFuncPickerPointer;

并从中解决了如何编写实际调用其中一个函数的表达式。使用“裸”,非typedef的声明,我立即知道呼叫的结构是

char *theName = (*(*a[i])())();

答案 1 :(得分:6)

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

tFuncRetCharFunc arr[N];

答案 2 :(得分:3)

将大问题分成更小的部分:

/* char_func_ptr is pointer to function returning pointer to char */
typedef char* (*char_func_ptr)();

/* func_func_ptr is a pointer to function returning above type */
typedef char_func_ptr (*func_func_ptr)();

/* the_array is array of desired function pointers */
func_func_ptr the_array[42];

答案 3 :(得分:1)

返回指向函数指针的函数的N个指针数组返回一个char:

int (*(*arr_fp[n])(void))(void)

答案 4 :(得分:0)

这就是你要找的东西:

typedef char* charptr;
typedef charptr (*innerfun)();
typedef innerfun (*outerfun)();

const size_t N = 10;
outerfun my_outerfun_array[N];

我希望我说得对,这对我来说似乎是一个奇怪的问题,尤其是在采访中:(

答案 5 :(得分:0)

使用typedef克里斯托弗告诉你,这只是宣告这种事情的人道方式。如果没有tyedef,它将成为:

char *(*(*arr[10])(void ))(void );

(是的,我不得不作弊而且跑了     CDECL>将arr声明为指向函数的指针的数组10(void)返回指向function(void)的指针返回指向char的指针