c语言中能不能定义函数数组

在c语言中,我想把多个具有相同的形式参数的函数定义成数组形式的函数,如:intf[5](inta,intb),就有5个函数了,函数名分别是f[0],f[1],.....f... 在c语言中,我想把多个具有相同的形式参数的函数定义成数组形式的函数,如:
int f[5](int a,int b),就有5个函数了,函数名分别是f[0],f[1],.....f[5].,不知道有没有那种方法能实现啊?
我是在写求积分问题时,由于积分方程太多,一个一个声明太麻烦,于是我就想到可不可以定义一个数组函数,一次就行了,然后用一个指针函数就方便多了,但是显示出错信息error C2092: array element type cannot be function
展开
 我来答
寻找彩虹218
2019-06-17 · TA获得超过120个赞
知道答主
回答量:4
采纳率:0%
帮助的人:3254
展开全部

函数不可以定义为数组,可以用函数指针来操作。

1.函数指针的数组定义方法:返回值类型( * 指针变量名[Number]) (形参列表)。
例如:

double add(double a,double b){}

double sub(double a,double b){}

double mul(double a,double b){}

double div1(double a,double b){}

double (*oper_func[])(double, double) = {add,sub,mul,div1};//函数指针的数组定义。

2.函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。

C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数。


扩展资料:

指针函数和函数指针的区别:

这两个概念都是简称,指针函数是指返回值是指针的函数,即本质是一个函数。我们知道函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。其定义格式如下所示:返回类型标识符*函数名称。

返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。



参考资料:百度百科函数指针

肥仙女a
高粉答主

2020-04-18 · 我是游戏小达人,专注于分享游戏资讯。
肥仙女a
采纳数:477 获赞数:115459

向TA提问 私信TA
展开全部

1、首先,我们编写头文件以及main函数主框架。

2、然后我们编写如图语句,int可更改为任意其他类型。

3、接下来我们可以for语句给他赋值。

4、为了方便测试,我们可以将其输出。

5、然后我们点击编译运行按钮。

6、这个时候我们便可以看到如下图效果。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tattackor
推荐于2017-10-15 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:793万
展开全部

函数不可以定义为数组,可以用函数指针来操作。

1.函数指针的数组定义方法:返回值类型( * 指针变量名[Number]) (形参列表)。
例如:
double add(double a,double b){};
double sub(double a,double b){};
double mul(double a,double b){};
double div1(double a,double b){};
double (*oper_func[])(double, double) = {add,sub,mul,div1};//函数指针的数组定义

2.函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。

3.函数指针的声明方法为:
返回值类型( * 指针变量名) (形参列表);
“返回值类型”说明函数的返回类型,“( * 指针变量名)”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f = func; /* 将func函数的首地址赋给指针f */
或者使用下面的方法将函数地址赋给函数指针:
f = &func;
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
例子:

#include<stdio.h>
int max(int x,int y){return (x>y? x:y);}
int main(){
    int (*ptr)(int, int);
    int a, b, c;
    ptr = max;
    scanf("%d%d", &a, &b);
    c = (*ptr)(a,b);
    printf("a=%d, b=%d, max=%d", a, b, c);
    return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
晨曦月殇
2015-10-22 · TA获得超过972个赞
知道小有建树答主
回答量:146
采纳率:100%
帮助的人:90万
展开全部
可以的兄弟,函数数组就是把函数的地址存入数组,可以定义一个指针数组传入函数名。但是我建议要存储一系列函数的地址的话最好定义一个结构体把函数地址传入,把结构体加入链表中,操作系统中这样做很常见。

给你个例子
fun function[4]={print_on_a,print_on_b,print_on_c,print_on_d};
看到没数组中都是函数名,函数名实际上就是函数的地址,就和数组名是数组地址一样。
具体代码如下:
#include <stdio.h>
typedef void (*fun)(void); //这个是函数指针
void print_on_a()
{
printf("a\n");
}
void print_on_b()
{
printf("b\n");
}
void print_on_c()
{
printf("c\n");
}
void print_on_d()
{
printf("d\n");
}
void main()
{
fun function[4]={print_on_a,print_on_b,print_on_c,print_on_d};
(*function[0])();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Laplas
推荐于2017-09-20 · TA获得超过1万个赞
知道大有可为答主
回答量:2680
采纳率:50%
帮助的人:2330万
展开全部
#include <stdio.h>
#include <stdlib.h>

typedef int (*PF_CALC) (int a, int b);

int func1(int a, int b)
{
return a+b+10;
}
int func2(int a, int b)
{
return a+b+20;
}
int func3(int a, int b)
{
return a+b+30;
}
int func4(int a, int b)
{
return a+b+40;
}
int func5(int a, int b)
{
return a+b+50;
}

void main()
{
PF_CALC pFuncList[5] = {func1, func2, func3, func4, func5};

for (long k=0; k<5; k++)
{
printf("Test Func %d (2, 4): %d\n",
k, pFuncList[k](2,4));
}
}

但是函数指针有时有移植的问题,所以我会选择以下代码,容易理解和维护:

int func_all(int type, int a, int b)
{
switch(type)
{
case 0: return func1(a,b);
case 1: return func2(a,b);
case 2: return func3(a,b);
case 3: return func4(a,b);
case 4: return func5(a,b);
}
return 0;
}

void main()
{
// PF_CALC pFuncList[5] = {func1, func2, func3, func4, func5};

for (long k=0; k<5; k++)
{
printf("Test Func %d (2, 4): %d\n",
k, func_all(k,2,4));
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式