gpt4 book ai didi

c - 函数指针数组指针用作函数的返回值

转载 作者:太空宇宙 更新时间:2023-11-04 04:21:28 33 4
gpt4 key购买 nike

我想创建一个函数,它返回一个函数指针数组指针(即一个指针指向一个数组,其元素是函数指针)。我这样声明:

void (*(*getFuncArrayPointer(int flag)))[3]{}

但是我得到了错误:

returnFuncAttrPointer.c:27:10: error: declaration of ‘getFuncArrayPointer’ as array of voids
returnFuncAttrPointer.c:28: confused by earlier errors, bailing out
Preprocessed source stored into /tmp/ccYiPPru.out file, please attach this to your bugreport.

似乎解析出数组的元素类型为void。

这是我的全部代码:

    #include <stdio.h>

typedef void (*FUNC)(int);

static void func1(int num)
{
printf("This is func1. num=%d\n", num + 1);
}

static void func2(int num)
{
printf("This is func2. num=%d\n", num + 2);
}

static void func3(int num)
{
printf("This is func3. num=%d\n", num + 3);
}

FUNC funcArray1[] = {func1, func2, func3}; // Function Pointer Array
FUNC funcArray2[] = {func3, func2, func1}; // Function Pointer Array

/* Function Pointer Array Pointer used as a return type */
/* Fcuntion: getFuncArrayPointer(int flag) ==> func Return type: void (*(*func))[3] ==> Array Pointer ==>
* Array Pointer: Array--(*)[3] Elemnet--void (*func) ==> void (*funcArray(int start)) ==> Function Pointer
*/
void (*(*getFuncArrayPointer(int flag)))[3]
{
switch(flag)
{
case 1:
return &funcArray1;
case 2:
return &funcArray2;
default:
return NULL;
}
}

int main()
{
int num;

// (*pfuncArray)[3] ==> Array Pointer
// void (*)(int) ==> Function Pointer
void (*(*pfuncArray[3]))(int); // Function Pointer Array Pointer

printf("input a number: ");
scanf("%d", &num);

pfuncArray = getFuncArrayPointer(num);
if(pfuncArray)
{
(*funcArray)[0](num);
(*funcArray)[1](num);
(*funcArray)[2](num);
}

return 0;
}

海湾合作委员会版本:海湾合作委员会 (海湾合作委员会) 4.6.2 20111027 (红帽 4.6.2-1)版权所有 (C) 2011 Free Software Foundation, Inc.这是免费软件;有关复制条件,请参阅来源。没有保修单;甚至不是为了特定目的的适销性或适用性。

操作系统:Linux sslvpn 3.6.10-2.fc16.i686.PAE #1 SMP 12 月 11 日星期二 19:10:54 UTC 2012 i686 i686 i386 GNU/Linux

最佳答案

你可以这样做:

// create array of 3 function pointers
void (*function_array[3])() = {func1, func2, func3};

// function that gets that array and returns it
void (*(*getFParray(int num))[3])()
{
return &function_array;
}

关于c - 函数指针数组指针用作函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46422314/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com