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

具体代码如下:

#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]的各个成员,为何这样能行?

胡子哥哥
浏览 107回答 2
2回答

婷婷同学_

type fun_name();这种是老式的函数声明,参数表是空的,即使有变元,也不列出, 也就是说可以接受任意参数老式函数声明是过时的,不应在新代码中使用,与c++也不兼容c++中参数位置用void,或留空,都是没有变元,而c中没有变元要明确写void,type fun(void);留空的话可以填入任意参数与老式声明对应的是老式的参数声明方法float f(a,b,ab)int a,b;char ab;{/*...*/}

ABOUTYOU

这个是合法的,但具有不确定性,不推荐
打开App,查看更多内容
随时随地看视频慕课网APP