为什么指向不同函数的函数指针的工作方式比定义的要好

时间:2013-09-16 02:39:45

标签: c pointers

在下面的程序中,函数指针被定义为指向一个函数,该函数不接受任何参数并返回int,但函数指针在这里工作。为什么呢?

#include<stdio.h>

int mul(int*,int*);

int main()
{   int a=10,b=20;
    int(*p)();
    p=&mul;
    printf("%d ", (*p)(&a,&b));
        return 0;
}


int mul(int*a,int*b)
{   
    return (*a * *b);
}

1 个答案:

答案 0 :(得分:3)

在C中,int (*p)()表示声明一个指向函数的指针,该函数接受未指定的个参数并返回int。由于未指定参数的数量,因此有效将指向函数int mul(int *a, int *b)的指针指定给变量p

如果将声明更改为int (*p)(void),这意味着声明指向无参数并返回int的函数的指针,则编译器可能会抛出一个关于不兼容的指针类型的警告。对于gcc,会在默认警告级别发出警告。

正如Keith Thompson在评论中提到的,你应该总是使用原型,即指定参数类型的声明。在这种情况下,它将是:

int (*p)(int*, int*);

<强>参考