为了账号安全,请及时绑定邮箱和手机立即绑定

具体如下,开始定义的Func不是无形参的类型函数指针类型嘛? 谢谢~

具体如下,开始定义的Func不是无形参的类型函数指针类型嘛? 谢谢~

胡子哥哥 2022-06-16 16:11:27
具体代码如下:#include <stdio.h>#include <stdlib.h>typedef int (*Func)() ;int func0(int a);int func1(int a, int b);int func2(int a, int b, int c);int FuncPtrArrInit(Func *p, int n);int func0(int a){printf("Func:%s, a = %d\n", __func__, a);return 0;}int func1(int a, int b){printf("Func:%s, a = %d, b = %d\n", __func__, a, b);return 0;}int func2(int a, int b, int c){printf("Func:%s, a = %d, b = %d, c = %d\n", __func__, a, b, c);return 0;}int FuncPtrArrInit(Func *p, int n){Func fn[3];fn[0] = p[0];fn[1] = p[1];fn[2] = p[2];fn[0](0);fn[1](1,1);fn[2](2,2,2);return 0;}int main(){Func afn[3];afn[0] = func0;afn[1] = func1;afn[2] = func2;FuncPtrArrInit(afn, 3);return 0;}--------------------------------------------我的问题就是开始处,这个程序定义了typedef int (*Func)() ;即Func表示一个返回值为整型,无形参的函数指针类型。但是下面赋值时,func1,func2,func3每个函数的形参个数都不一样,而且均是有形参的,但是上面的代码就直接将这个函数地址给了Func类型的数组afn[3]的各个成员,为何这样能行?
查看完整描述

2 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

type fun_name();
这种是老式的函数声明,参数表是空的,即使有变元,也不列出, 也就是说可以接受任意参数
老式函数声明是过时的,不应在新代码中使用,与c++也不兼容

c++中参数位置用void,或留空,都是没有变元,

而c中没有变元要明确写void,
type fun(void);
留空的话可以填入任意参数

与老式声明对应的是老式的参数声明方法
float f(a,b,ab)
int a,b;
char ab;
{/*...*/}

查看完整回答
反对 回复 2022-06-20
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

这个是合法的,但具有不确定性,不推荐

查看完整回答
反对 回复 2022-06-20
  • 2 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信