首页 > 其他分享 >从零开始学习嵌入式----C语言函数指针

从零开始学习嵌入式----C语言函数指针

时间:2024-07-12 13:28:20浏览次数:10  
标签:return calculate int C语言 ---- 函数指针 函数

C语言的函数指针:从入门到深入理解

       函数指针是C语言中一个强大且灵活的特性,它允许我们将函数作为参数传递给其他函数,或者将函数存储在数据结构中。正确理解和使用函数指针可以帮助我们编写更加模块化、高效和可扩展的代码。

一、 什么是函数指针?

       在C语言中,每个函数都位于内存中的特定地址。函数指针就是一个指向函数入口地址的指针变量。我们可以像使用其他类型的指针一样使用函数指针,例如对它进行赋值、解引用以及作为参数传递。

二、声明函数指针

声明函数指针的语法如下:

返回类型 (*指针变量名)(参数列表);

       例如,以下代码声明了一个名为 funcPtr 的函数指针,它指向一个返回值为 int 类型,参数为两个 int 类型的函数:

int (*funcPtr)(int, int);

三、函数指针的初始化和使用

我们可以使用函数名来初始化函数指针,例如:

int add(int a, int b) {
  return a + b;
}

#  #
int main() {
  int (*funcPtr)(int, int) = add; // 初始化函数指针
  int result = funcPtr(2, 3); // 通过函数指针调用函数
  printf(「%d
」, result); // 输出 5
  return 0;
}

四、 函数指针作为函数参数

       函数指针可以作为参数传递给其他函数,这使得我们可以编写更加通用的函数。例如,以下代码定义了一个 calculate 函数,它接受一个函数指针作为参数,并使用该函数指针来执行计算:

int calculate(int a, int b, int (*operation)(int, int)) {
  return operation(a, b);
}

#  #
int main() {
  int result1 = calculate(2, 3, add);
  int result2 = calculate(4, 5, subtract);
  printf(「%d %d
」, result1, result2); // 输出 5 -1
  return 0;
}

五、函数指针的应用场景

函数指针在C语言中有广泛的应用,例如:

  • 回调函数: 可以将函数指针作为参数传递给其他函数,以便在特定事件发生时调用。

  • 动态函数调用: 可以根据运行时条件选择要调用的函数。

  • 实现函数表: 可以使用数组存储函数指针,从而实现类似于 switch-case 语句的功能。

  • 泛型编程: 可以使用函数指针来编写可以处理不同数据类型的函数。

六、注意事项

  • 在使用函数指针之前,必须先进行初始化。

  • 函数指针的类型必须与它所指向的函数类型完全匹配。

  • 理解函数指针的语法可能比较困难,需要仔细阅读和理解代码。

七、总结

       函数指针是C语言中一个强大且灵活的特性,它可以帮助我们编写更加模块化、高效和可扩展的代码。 通过学习和理解函数指针的语法和应用场景,我们可以更好地利用C语言的强大功能。

标签:return,calculate,int,C语言,----,函数指针,函数
From: https://blog.csdn.net/D1557329860/article/details/140376528

相关文章

  • Ubuntu系统下相关问题解决方案(亲测)
    系统:ubuntu20.04记录使用ubuntu系统过程中遇到的一些问题以及亲测有效的解决方案后续遇到其他问题,会将相关内容持续更新对应原文:Ubuntu系统下相关问题解决方案(亲测)-知乎(zhihu.com)目录一、速度问题1.1gitcloneGithub上的项目时速度慢1.2ubuntu下设置pip加速1.......
  • java实现浅拷贝与深拷贝
    目录浅拷贝 深拷贝实现cloneable接口序列化浅拷贝浅拷贝是指创建一个新的对象,该对象的内容是原始对象中各项的引用。换句话说,浅拷贝仅复制了原始对象中元素的引用,而不是元素本身的拷贝classPeopleimplementsCloneable{privateStringname;privateint......
  • 腾讯特别调薪8%,年底十三薪分摊到月薪:福利升级还是另有深意?
    近日,一则关于腾讯公司薪酬政策调整的消息在业内外引起了不小的震动。据悉,腾讯宣布把校招生的房补从4000元每月调整为按15个月发放,并加在月薪base中。调整后,员工每月base工资增加3200元,多出来的三个月同年终奖一起发放。腾讯对校招生的房补标准每月4000元(北上广深,成都标......
  • 米哈游平均月薪44.2K,高出同行2倍,揭秘游戏行业薪资神话!
    如果说数字世界里的金币能让人心动,在现实中有一个公司直接给员工发放硬通货(工资),那无疑就是传说中的赢家——比如这位名叫米哈游的大玩家。近期,米哈游(miHoYo)公司凭借其平均月薪高达44.2K的薪资水平,再次将游戏行业的薪资话题推向了风口浪尖。游戏行业的平均薪资就已经高......
  • 关于cartographer在github中的文件分配
    Cartographer是一个开源的库,用于2D和3D的SLAM。在Cartographer项目中,地图构建的数据传入和处理通常分布在几个不同的组件和文件夹中。以下是一些可能包含相关代码的文件夹和组件:1.**传感器驱动**(`cartographer/sensor`):这个目录包含用于处理不同类型传感器输入的代码,例如......
  • uniapp 使用uview 组件 DatetimePicker 默认值无效问题
    1.DatetimePicker默认值无效问题 -- 解决办法:使用$refs解决<u-datetime-pickerref="defaultPicker":show="openDatePicker":value="dateValue"mode="date" minDate="-2209017943"closeOnClickOverl......
  • js 数组方法 - 查找 - indexOf()、includes()、find()、findIndex()、filter()、lastI
    indexOf()该方法可以返回数组中指定元素的索引,如果不存在,则返回-1。constarr=["apple","banana","orange"];constindex=arr.indexOf("banana");console.log(index);//输出:1constarr2=["aaa","bbb","ccc",9......
  • 动态规划的一种常见技巧
    动态规划是运筹学的一个分支,是求解决策过程最优化的过程。动态规划并不是一种算法,而是一种思想,或者说策略动态规划的思想就是将大问题分解成一个一个的小问题,聚焦到每个小问题并逐个击破,小问题解决了就没有大问题了我们以一个关于最长递增子序列问题为例,设想你有一个包含......
  • Arpa’s overnight party and Mehrdad’s silent entering
    Arpa’sovernightpartyandMehrdad’ssilententering题目大意给\(n\)对情侣染色,要求情侣不能然相同颜色而且相邻\(3\)人的颜色不同,求合法方案。数据范围满足\(1\len\le10^5\)。思路钦定\(2i-1\)与\(2i\)的人吃的食物不一样,那么这样建图跑出来的一定是二分图......
  • Fortune Wheel - Problem
    FortuneWheel-Problem题目大意有一个上有编号\(0\)到\(n-1\)的转盘,你可以使转盘随机旋转到一个位置或者向前旋转\(k_i\)个位置,求在最优策略下的期望步数。数据范围满足,\(1\len\le10^5,\lvertk\rvert\le500\)。思路考虑先使用bfs,在\(O(n\lvertk\rvert)\)的......