在C中使用typedef函数指针

时间:2013-09-26 16:38:45

标签: c pointers function-pointers typedef

我正在尝试使用函数指针,这有点像这样:

#include "stdio.h"

typedef void (*func)(int*, int*);


void func1(int *a, int*b)
{
    printf("Func1\n");
}

void func2(int *a, int*b)
{
    printf("Func2\n");
}

void func3(int *a, int*b)
{
    printf("Func3\n");
}

int main()
{
    int i;
    func f[] = {
      func1, func2, func3
    };
    printf("Hello\n");

    for(i=0; i< 3; i++)
    {
        func fn = f[i];
        *(fn)(&i, &i);
    }
    return 0;
}

我总是得到错误:“虚假价值不被忽视,因为它应该是”

不知道,如何克服这一点。有人可以帮忙吗?

5 个答案:

答案 0 :(得分:1)

您需要使用以下内容:

(*fn)(&i, &i);

答案 1 :(得分:1)

它可以是(*fn)(&i, &i),也可以是fn(&i,&i)。否则你试图取消引用函数调用的结果!

(或者,五星级程序员经常说(*****fn)(&i, &i)

答案 2 :(得分:0)

此错误意味着您将void函数的返回分配给某个东西,这是一个错误。

试试这个: -

(*fn)(&i, &i);

答案 3 :(得分:0)

试试这个:

(*fn)(&i, &i);

答案 4 :(得分:0)

不要写*(fn)(...) - 简单fn(...)就足够了,不需要取消引用任何内容。你所拥有的意思是“取消引用fn(...)的返回值”,但你显然不能这样做。