gpt4 book ai didi

c - 为什么指向不同函数的函数指针与定义的不同

转载 作者:太空宇宙 更新时间:2023-11-04 07:25:27 25 4
gpt4 key购买 nike

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

最佳答案

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

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

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

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

引用

关于c - 为什么指向不同函数的函数指针与定义的不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18819705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com