typedef的函数指针 #包括 typedef int(*func)(int); 整数相加(整数a) { 返回+a; } int getfunc(func myfunc) { myfunc=&add; 返回0; } int main() { int i; func myfunc; i=10; getfunc(myfunc); printf(“a是%d\n”,(*myfunc)(i)); 返回0; }
我不能得到我想要的。 结果是“a为0”。typedef的函数指针 #包括 typedef int(*func)(int); 整数相加(整数a) { 返回+a; } int getfunc(func myfunc) { myfunc=&add; 返回0; } int main() { int i; func myfunc; i=10; getfunc(myfunc); printf(“a是%d\n”,(*myfunc)(i)); 返回0; },c,C,我不能得到我想要的。 结果是“a为0”。 为什么会这样呢?我想你真的很幸运,你得到了a is 0而不是崩溃。问题是getfunc按值获取函数指针,因此myfunc=&add内部的getfunc对调用方没有任何影响。试一试 #include <stdio.h> typedef int (*func)(int); int add (int a) { return ++a; } int getfunc(func myfunc) { myfunc = &
为什么会这样呢?我想你真的很幸运,你得到了
a is 0
而不是崩溃。问题是getfunc
按值获取函数指针,因此myfunc=&add
内部的getfunc
对调用方没有任何影响。试一试
#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;
}
总的来说:
int getfunc(func *myfunc)
{
*myfunc = &add;
return 0;
}
我认为你真的很幸运,你得到了
a是0而不是崩溃。问题是getfunc
按值获取函数指针,因此myfunc=&add
内部的getfunc
对调用方没有任何影响。试一试
#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;
}
总的来说:
int getfunc(func *myfunc)
{
*myfunc = &add;
return 0;
}
它应该更像这样(用标记的更改)它应该更像这样(用标记的更改这里没有问题,但您需要按地址传递,而不是按值传递。问题似乎是getfunc(myfunc);
将getFunc修复为:
#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;
}
用getFunc(&myfunc);
这里没有问题,但您需要按地址传递,而不是按值传递。问题似乎是getFunc(myfunc);
将getFunc修复为:
#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;
}
并用getFunc(&myfunc)调用它;
myfunc
是指针。您创建了它,但从未给它赋值。然后用一个野生指针调用getFunc
试试这个(你的版本,简化版):
myfunc
是一个指针。您创建了它,但从未给它赋值。然后用一个野生指针调用getfunc
试试这个(你的版本,简化版):