首页 > 其他分享 >c语言函数指针和函数数组

c语言函数指针和函数数组

时间:2024-07-09 21:27:22浏览次数:14  
标签:函数 形参 int void 数组 类型 函数指针

1. 函数指针

我们都知道c语言指针可以指向整形,浮点型,字符等等,但实际上指针也可以指向函数

实际上当我们定义一个函数时,最终都会创建一个函数指针存储函数的地址。

那么函数指针怎么定义呢?函数指针的定义不同于其他变量的定义,其他变量的定义是这样的:

变量类型 变量名;

但c语言没有函数类型这一变量类型,因为函数类型太多了,你可以给一个函数传入整形,浮点,也可以返回字符,指针等等,

因此函数类型不是单一的。

因此要确定一个函数的类型需要确定他的形参数量和类型,返回参数的类型。

因此函数指针的定义是:

函数返回类型 (*指针名)(形参类型1,形参类型2);

注意这里(指针名)的括号不能去掉,否则的话就会变成 函数返回类型 *指针名(形参类型1,形参类型2); 这个的意思是定义一个返回类型为指针的函数

示例:

#include <stdio.h>
void fun1(){
    printf("fun\n");
}
int main(){
    //定义一个指向返回类型为void,无形参的函数的指针
    void (*a)() = fun;
    //调用函数
    a();
    return 0;
}
输出:
fun

通过函数指针我们就可以将一个函数1传给另一个函数2当做形参,如:

#include <stdio.h>

void fun(int i){
    printf("fun%d\n",i);
}
void fun2(void (*a)(int),int i){
    a(i);
}

int main(){
    //定义一个指向返回类型为void,形参为int的函数的指针
    void (*fun_pointer)(int) = fun;
    //将函数指针作为参数传给fun2
    fun2(fun_pointer,1);
    return 0;
}
输出:
fun1

2. 函数数组

不止如此,c语言除了函数指针,还有函数数组,定义方式和函数指针也很相似,只需要加个[]即可:

函数返回类型 (*数组名[])(形参类型1,形参类型2);

示例:

#include <stdio.h>

void fun1(){
    printf("fun1\n");
}
void fun2(){
    printf("fun2\n");
}
//定义一个函数数组
void (*a[])() = {fun1,fun2};

int main(){
    a[0]();
    a[1]();
    return 0;
}
输出:
fun1
fun2

标签:函数,形参,int,void,数组,类型,函数指针
From: https://blog.csdn.net/m0_53229076/article/details/140307074

相关文章

  • 数组
    数组相同类型数据的有序集合,数组也是对象,数组长度一旦确定不可更改。每一个数据被称为一个数组元素,每个数组元素可以通过索引(下标,从0开始)访问必须先声明数组变量,才能使用数组:数据类型[]数组名称;例:Int[]nums;Java用new操作符创建数组,例:nums=newint[10];获取数......
  • 字符串函数
    在编写程序的过程中,我们经常需要用到字符串函数,为了方便对字符串进行处理,C语言标准库中提供了一系列库函数。在使用标准库中的字符串函数之前,我们需要引用头文件string.h。接下来我们对经常用到的字符串函数进行逐一介绍。strlen的使用和模拟实现strlen的全称是stringlengt......
  • Golang 切片作为函数参数传递的陷阱与解答
    作者:林冠宏/指尖下的幽灵。转载者,请:务必标明出处。GitHub:https://github.com/af913337456/出版的书籍:《1.0-区块链DApp开发实战》《2.0-区块链DApp开发:基于公链》例子切片作为函数参数传递的是值用来误导切片作为函数参数传递的是引用函数内切片append引起......
  • 常见python数据类型及其相对应的函数
     列表:list是个有值序列,可以被修改的元素1.访问方式:foriinrange(len(ls)):   forcinls:fori,cinenumerate(ls):Python列表函数1cmp(list1,list2)比较两个列表的元素2len(list)列表元素个数3max(list)返回列表元素最大值4......
  • 09 为内核支持函数调用
    在[[08内核第一条指令|上一节]]我们使用了编写entry.asm函数中编写了内核的第一条指令,但是我们使用的汇编.这里注意我们仍然是嵌入了这段asm代码到我们的rust代码之中,然后进行编译.但是即使连使用fnmain都不被允许,因此我们如果希望使用rust来编写内核代码,因此我们最好为内核......
  • 函数进阶应用2
    查询并标记停产商品要求:停产商品标记为红颜色具体操作选中B列——开始选项卡——条件规则——新建规则,选择“使用公式……格式的单元格”——在公式输入框中输入“=VLOOKUP(B2,选择区域,返回列,精确匹配)="停产”——格式,选填充色为红色——确定*2操作演示有效性与函......
  • jmeter自定义函数开发—Web3钱包生成工具
    之前使用Jmeter进行接口测试时,有生成钱包地址的需求,于是有时间就简单写了个自定义函数环境说明JDK1.8.0,Jmeter5.4.3,maven构建工具实现代码新建一个简单的maven项目即可,以下是pom.xml配置<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org......
  • JAVA-二维数组-要求计算出每个季度的总营业额和全年的总营业额-求指导
            二维数组的练习某商城每个季度的营业额如下:单位(万元)第一季度:22,66,44第二季度:77,33,88第三季度:25,45,65第四季度:11,66,99要求计算出每个季度的总营业额和全年的总营业额package_exercis;publicclassTwoArray{publicstaticvoidmain(S......
  • 【TWVRP】蚁群算法求解带时间窗的车辆路径规划(目标函数:最短距离)【含Matlab源码 4969期
    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信或扫描文章底部QQ二维码。......
  • CF1864F Exotic Queries (离线+线段树+树状数组)
    CF1864FExoticQueries离线+线段树+树状数组先把权值在\([l,r]\)之内的单独拎出来看性质。可以知道策略一定是元素从小到大消成\(0\)。当消除元素\(x\)时,最好的情况当然是一次全消了,但一般元素\(x\)的位置两两之间会有之前消成的\(0\),将所有位置分成了\(n\)段,那么消......