【问题标题】:Using typedef function pointer in C在 C 中使用 typedef 函数指针
【发布时间】:2013-09-26 16:38:44
【问题描述】:

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

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

我总是收到错误:“无效值没有被忽略”

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

【问题讨论】:

    标签: c pointers function-pointers typedef


    【解决方案1】:

    你需要像下面这样使用:

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

    【讨论】:

      【解决方案2】:

      要么是(*fn)(&amp;i, &amp;i),要么只是fn(&amp;i,&amp;i)。否则你试图取消引用函数调用的结果!

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

      【讨论】:

        【解决方案3】:

        这个错误意味着你将一个 void 函数的返回值赋给了某个东西,这是一个错误。

        试试这个:-

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

        【讨论】:

          【解决方案4】:

          试试这个:

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              猜你喜欢
              • 2023-04-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-01-03
              • 2011-05-16
              • 1970-01-01
              • 2021-06-27
              相关资源
              最近更新 更多