指向函数指针

8

是否可以创建一个指向函数指针的指针,即

int32_t (*fp[2])(void) = {test_function1, test_function_2}; // initialize a function pointer

<unknown> = fp;

需要在未知位置写什么?对于“正常”的数组,我可以这样做:
int a[2] = {0, 1};

int* p = a;

非常感谢您的提前帮助。

如果你只想要一个指针,为什么要将fp声明为函数指针数组? - Some programmer dude
函数指针数组的大小应该是无关紧要的。 - user2389717
1
int32_t (**fpp)(void) = fp; - BLUEPIXY
但我只想要一个指针,它将指向数组的第一个元素。 - user2389717
1
你是否尝试过将<unknown>声明为一个普通的函数指针?请记住,数组会衰减为指向它们第一个元素的指针,在你的情况下,fp会衰减为指向test_function1的指针。 - Some programmer dude
显示剩余3条评论
2个回答

35
typedef void(*func_ptr_t)(void); // a function pointer

func_ptr_t* ptr_to_func_ptr;     // a pointer to a function pointer - easy to read
func_ptr_t  arr[2];              // an array of function pointers - easy to read

void(**func_ptr_ptr)(void);      // a pointer to a function pointer - hard to read
void(*func_ptr_arr [2])(void);   // an array of function pointers - hard to read

如果我有void (**foo)(int, int)作为函数指针的指针,那么如何使用函数指针? - Bionix1441
1
http://stackoverflow.com/questions/36564473/pointer-to-a-function-a-different-approach-of-declaring - AlphaGoku

3
typedef int32_t FP(void);

FP *fp[2] = { test_function1, test_function2 };
FP **p = fp;

个人而言,我可能会将类型别名FP作为指针,但这只是个人喜好问题。 :) - Some programmer dude
1
@JoachimPileborg 我也会这样做,函数指针是唯一可以在typedef后面隐藏指针的情况。但我认为这个答案的风格也很好,因为它与永远不要typedef掉指针的规则保持一致。 - Lundin
这样您也可以声明函数,例如:FP test_function1, test_function2; - M.M
@MattMcNabb,我并不推荐这样做,因为这会让读者将它们与变量混淆。例如,你很容易在本地作用域中声明一个函数而犯错。 - Lundin

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