2011-04-06 121 views
4
int (*rdPtrList[4])(unsigned int addr, unsigned int data); 

上面声明了返回int并带两个unsigned int的函数的指针大小为4的数组。我想创建一个指向这个数组的指针。这可能在C吗?指向函数指针数组的指针

回答

6

啊,棘手的棘手!

认为这个工程

int (*(*rdPtrList)[4])(unsigned int addr, unsigned int data); 

因为编译器告诉我_countof(*rdPtrList)是4


(我希望你能只说int function(unsigned int addr, unsigned int data)[4]*就像你可以在d,它是这么多更具可读性:它将是一个“函数数组指针”。)

+0

这编译,我将不得不回到你是否它的工作! – jliu83 2011-04-06 22:10:42

+0

@ jliu83:哈哈好吧! (它可能是。:P) – Mehrdad 2011-04-06 22:11:24

+0

验证您正确声明指针的正确方法是将数组地址指定给它,即'ptr_to_fixed_length_function_array =&array_of_functions;'。如果类型不正确,你的编译器应该抱怨这个任务。 – 2015-07-07 23:46:06

4

试试这个:

typedef int(*rdPtrList_t[4])(unsigned int addr, unsigned int data); 
rdPtrList_t *ptrToArray; 
+0

这工作!什么是不使用typedef的语法?如果没有typedef,甚至可能吗? – jliu83 2011-04-06 22:09:30

+1

@Idanko:两种解决方案都可以工作。不过我更喜欢不使用typedef。谢谢。 – jliu83 2011-04-07 01:09:59

13

离开了参数牢记以下更易于阅读:

 
     p   -- p 
     *p   -- is a pointer 
     (*p)[4]  -- to a 4-element array 
    *(*p)[4]  -- of pointers 
    (*(*p)[4])() -- to functions 
int (*(*p)[4])(); -- returning int.