我尝试让 make foo 返回指向 fun2 的指针,但它似乎不起作用。这里有什么问题?我想要 y 输出 20

问题描述 投票:0回答:1
int (*foo(int(*f)(int,int)))(int,int)
{
    printf("hello");
    return f+1;
}

int fun1(int x, int y)
{
    return x+y;
}
int fun2(int x,int y)
{
    printf("hey");
    return x*y;
}

int main()
{
    int (*fun_ptr[2])(int,int);
    int x,y;
    fun_ptr[0]=&fun1;
    x=fun_ptr[0](4,5);
    printf("%d\n",x);
    fun_ptr[1]=&fun2;
   
    fun_ptr[0]=foo(fun_ptr[0]);
    y=fun_ptr[0](4,5);
    
    printf("%d",y);
    return 0;

}

我尝试使用 return f+1 让 foo 返回指向 fun2 的指针。所以它应该(在我看来)指向数组 fun_ptr 中的下一个元素,其中 fun_ptr[1] 是指向 fun2 的指针。因此,y 应该是 20,但根本没有输出。 x 打印正常。

c function-pointers
1个回答
0
投票

为了使指针算术能够处理数组,指针必须指向数组的元素。在这里,您有一个指向函数的指针数组,因此指向元素的指针将是指向函数指针的指针。那就是

int (**)(int, int)

因此,如果将 foo 的声明更改为

int (**foo(int(**f)(int,int)))(int,int)

它应该按您的预期工作。您还需要将其称为

foo(&fun_ptr[0])

© www.soinside.com 2019 - 2024. All rights reserved.