指向函数指针数组的指针

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

上面的代码声明了一个大小为4的指针数组,用于存储返回int类型且接受两个unsigned int参数的函数的指针。我想创建一个指向这个数组的指针。在C语言中是否可以实现这一点?
3个回答

20

为了阅读方便,以下省略参数:

        p         -- p
       *p         -- 是一个指针
      (*p)[4]     -- 指向一个 4 元素数组
     *(*p)[4]     -- 再指向指针的数组
    (*(*p)[4])()  -- 指向函数的指针
int (*(*p)[4])(); -- 返回 int 的函数指针。

8
啊,有点棘手!!!
认为这个可行
int (*(*rdPtrList)[4])(unsigned int addr, unsigned int data);

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


(我希望你可以像在D语言中一样只需说出 int function(unsigned int addr, unsigned int data)[4]*,这样更易读:它将成为"函数数组指针"。)


编译完成了,我需要回复你是否成功了! - jliu83
@jliu83:哈哈,好的!(可能确实如此。:P) - user541686
验证你是否正确声明了指针的正确方法是将数组的地址分配给它,即 ptr_to_fixed_length_function_array = &array_of_functions;。如果类型不正确,则编译器应该就此发出警告。 - Theodore Murdock

5

试试这个:

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

这个可行!如果不使用typedef,语法会是什么样子?没有typedef真的可能吗? - jliu83
1
@Idanko:两种解决方案都起作用了。但是我更喜欢不使用typedef。谢谢。 - jliu83

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接