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; }

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为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 = &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

试试这个(你的版本,简化版):