2013-08-07 221 views
2

我有一个使用函数指针的代码中的问题,我们来看一看:函数指针 - 参数传递给一个函数指针

#include <stdio.h> 
#include <stdlib.h> 

typedef void (*VFUNCV)(void); 

void fun1(int a, double b) { printf("%d %f fun1\n", a, b); } 
void fun2(int a, double b) { printf("%d %f fun2\n", a, b); } 

void call(int which, VFUNCV* fun, int a, double b) 
{ 
    fun[which](a, b); 
} 

int main() 
{ 
    VFUNCV fun[2] = {fun1, fun2}; 
    call(0, fun, 3, 4.5); 
    return 0; 
} 

而且它产生错误:

/home/ivy/Desktop/CTests//funargs.c||In function ‘call’:| 
/home/ivy/Desktop/CTests//funargs.c|11|error: too many arguments to function ‘*(fun + (unsigned int)((unsigned int)which * 4u))’| 
/home/ivy/Desktop/CTests//funargs.c||In function ‘main’:| 
/home/ivy/Desktop/CTests//funargs.c|16|warning: initialization from incompatible pointer type [enabled by default]| 
/home/ivy/Desktop/CTests//funargs.c|16|warning: (near initialization for ‘fun[0]’) [enabled by default]| 
/home/ivy/Desktop/CTests//funargs.c|16|warning: initialization from incompatible pointer type [enabled by default]| 
/home/ivy/Desktop/CTests//funargs.c|16|warning: (near initialization for ‘fun[1]’) [enabled by default]| 
||=== Build finished: 1 errors, 4 warnings ===| 

我用了Code :: Blocks来编译它。

它的简单,当我没有任何参数,但有一些,我糊涂了:

#include <stdio.h> 
#include <stdlib.h> 

typedef void (*VFUNCV)(void); 

void fun1() { printf("fun1\n"); } 
void fun2() { printf("fun2\n"); } 

void call(int which, VFUNCV* fun) 
{ 
    fun[which](); 
} 

int main() 
{ 
    VFUNCV fun[2] = {fun1, fun2}; 
    call(1, fun); 
    return 0; 
} 

回答

8

你的函数指针不适合你的函数声明口粮。 尝试将其定义为

typedef void (*VFUNCV)(int, double); 
6

修复typedef

typedef void (*VFUNCV)(int , double); 

fun1fun2接受int类型和double两种说法