#include <stdio.h>
typedef int (*func)(int);
int add (int a)
{
return ++a;
}
int getfunc(func myfunc)
{
myfunc = &add;
return 0;
}
int main()
{
int i;
func myfunc;
i = 10;
getfunc(myfunc);
printf(" a is %d\n", (*myfunc)(i));
return 0;
}
我无法得到我想要的东西。 结果是“a为0”。 为什么会这样?
答案 0 :(得分:4)
我认为你很幸运得到a is 0
而不是崩溃。问题是getfunc
按值获取函数指针,因此myfunc = &add
内的getfunc
根本不会影响调用者。尝试
int getfunc(func *myfunc)
{
*myfunc = &add;
return 0;
}
并在主要:
getfunc(&myfunc);
答案 1 :(得分:2)
这里没有问题,但你需要传递地址,而不是价值。问题似乎是getfunc(myfunc);
将getFunc修复为:
int getfunc(func *myfunc)
{
*myfunc = &add;
return 0;
}
并使用getFunc(&myfunc);
答案 2 :(得分:1)
应该更像这样(用<<<
标记的更改):
#include <stdio.h>
typedef int (*func)(int);
int add(int a)
{
return ++a;
}
func getfunc(void) // <<<
{
return &add; // <<<
}
int main()
{
int i;
func myfunc;
i = 10;
myfunc = getfunc(); // <<<
printf(" a is %d\n", (*myfunc)(i));
return 0;
}
答案 3 :(得分:1)
myfunc
是一个指针。您创建了它但从未为其分配值。然后用野指针调用getfunc
!
试试这个(你的版本,简化版):
int getfunc(func *myfunc)
{
*myfunc = add;
return 0;
}
int main()
{
func myfunc = NULL;
getfunc(&myfunc);
}