在这个后续程序中,我尝试创建一个函数,返回一个指向 4 个函数指针数组的指针,但我不知道它是如何工作的,也不知道如何调用它并接收返回值,还有一个数组4 个函数指针(使其能够提取差异,但我不能)现在我对从这些方法中的任何 2 个方法(无论是数组还是函数)调用函数的方式感到困惑。
#include <stdio.h>
uint32 (*(*Fun2Ptr(void))[4])(void);
uint32 Function_1(void);
uint32 Function_2(void);
uint32 Function_3(void);
uint32 Function_4(void);
uint32(*Arrayof4FP[4])(void) = {Function_1 ,Function_2 ,
Function_3 ,Function_4};
int main()
{
uint32(*(*LocalMainArrof4FP)[4])(void) = Fun2Ptr();
printf("---------------Array--------------\n");
printf("%i \n" , (*Arrayof4FP[0])()); // 1
printf("%i \n" , (*Arrayof4FP[1])()); // 2
printf("%i \n" , (*Arrayof4FP[2])()); // 3
printf("%i \n" , (*Arrayof4FP[3])()); // 4
printf("-----------Using Function-------------\n");
printf("%i \n" ,(*LocalMainArrof4FP)[0]() ); // 1
printf("%i \n" ,(*LocalMainArrof4FP)[1]() ); // 2
printf("%i \n" ,(*LocalMainArrof4FP)[2]() ); // 3
printf("%i \n" ,(*LocalMainArrof4FP)[3]() ); // 4
return 0;
}
uint32 Function_1(void)
{
return 1;
}
uint32 Function_2(void)
{
return 2;
}
uint32 Function_3(void)
{
return 3;
}
uint32 Function_4(void)
{
return 4;
}
uint32 (*(*Fun2Ptr(void))[4])(void)
{
uint32 (*(*LocalPtrs)[4])(void) = &Arrayof4FP;
return LocalPtrs;
}
您不能从函数返回数组,而是返回指针。将数组移至函数并使用 static 关键字确保活力。添加了
uint32
缺少的 typedef,并使用了 inittypes.h 中的格式宏:
#include <inttypes.h>
#include <stdio.h>
#include <stdint.h>
typedef uint32_t uint32;
uint32 Function_1(void) {
return 1;
}
uint32 Function_2(void) {
return 2;
}
uint32 (**Fun2Ptr(void))(void) {
static uint32 (*fp[])(void) = { Function_1, Function_2 };
return fp;
}
int main(void) {
uint32 (**fp)(void) = Fun2Ptr();
printf("-----------Using Function-------------\n");
printf("%" PRIu32 "\n", fp[0]()); // 1
printf("%" PRIu32 "\n", fp[1]()); // 2
return 0;
}
和结果输出:
-----------Using Function-------------
1
2