问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-29 09:13

我来回答

5个回答

热心网友 时间:2022-06-25 07:34

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

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在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数。


扩展资料:

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

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

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



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

热心网友 时间:2022-06-25 07:34

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

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

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

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

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

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

热心网友 时间:2022-06-25 07:35

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

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;
}

热心网友 时间:2022-06-25 07:35

可以的兄弟,函数数组就是把函数的地址存入数组,可以定义一个指针数组传入函数名。但是我建议要存储一系列函数的地址的话最好定义一个结构体把函数地址传入,把结构体加入链表中,操作系统中这样做很常见。

给你个例子
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])();
}

热心网友 时间:2022-06-25 07:36

#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));
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
儿童散学归来早描述的是什么季节(儿童散学归来早描写的是什么季节) 超级死神进化论章节目录 我们没有忘记读后感458字作文 贷15万贷10年每月还多少钱 15万10年贷款月供多少 15万贷10年月供多少钱 15万贷款10年一月多少钱 贷款15万10年每月还多少 在银行贷款15万十年还清想知道利息和月供……(还望亲们提供的的2013年... 今天去刷qq空间 看到了一个同学的头像 说明他发了说说 可是怎么刷新... java 数组.类.构造函数的问题 m_array 类数组,setat函数是干什么的??? c语言,数组名作函数参数问题。 C语言数组与函数 c++操作数组的函数有那些? C++申请类数组要怎么构造函数? 以数组名作为作为函数参数的具体含义?? C语言中有没有返回数组类型的函数? 农商银行的房贷收到后为什么卡里还是显示余额为零? 农商银行的易贷通里还有40000的余额,再贷款的时候怎么余额为零了呢?我也没过期和别的 农村商业银行划转不良贷款余额是什么意思? 小朋友怎么打印电子身份证 为什么注册ins一直显示等几分钟 注册了ins,但是要审核,你们的一般多久就可以玩了呀? 新用户ins注册审核要多久 InstagramInstagram。突然显示:我们会审核你的信息,确认信息无误后,你将会有大概1_百度问一问 ins评论被阻止两天了,不是24小时吗?是不是在被*期间不能评论,否 ins审核信息24小时 什么意思? Instagram为什么审核24小时? 雅迪电动车为什么插入转换器就不会走呢? 如何声明并定义函数数组 请问一下各位高手在C++中数组类的构造函数怎么写? 求助!!!一道关于数组类及友元函数的C++编程题 求高手相助!!我该怎么调用处理数组的函数! 关于函数与数组 array()函数是什么意思 c语言中怎样调用返回类型为数组的函数 怎样学web网页制作? 邮箱验证js求教 请问十月一这七天详细的天气预报(最高最低气温和天气图标【晴、多云之类的】)是啥 今年大连的十月一日至七曰的天气预报!每天几度至几度? 十月一至七号河南天气 今年十月一日是啥天气 云南10月1号到5号的天气预报 十月一日天气怎么样 今年上海十月一日温度大概怎么样,天气是什么,如果去游泳还适合么? 买房怎么选楼层?哪些楼层噪音最刺耳? 10月1号至三号合肥的天气预报合肥的天气预报 为什么楼层越高反而感觉噪音越大? 2016年10月1日天气预报太原