1

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

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

我总是收到错误:“不应忽略的无效值”

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

4

5 回答 5

1

您需要使用如下:

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

于 2013-09-26T16:41:01.560 回答
1

要么是(*fn)(&i, &i),要么只是fn(&i,&i)。否则,您将尝试取消引用函数调用的结果!

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

于 2013-09-26T16:41:05.843 回答
0

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

尝试这个:-

(*fn)(&i, &i);
于 2013-09-26T16:41:24.753 回答
0

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

于 2013-09-26T16:44:28.490 回答
0

尝试这个:

(*fn)(&i, &i);
于 2013-09-26T16:41:30.470 回答