0

在下面的程序中,函数指针被定义为指向一个不接受参数并返回 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);
}

4

1 回答 1

3

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

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

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

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

参考

于 2013-09-16T02:53:11.433 回答