当前位置: 首页 > news >正文

C++学习笔记 26 函数指针

一、原始函数指针(raw function pointer)

函数指针:将一个函数赋值给一个变量的方法。

  1. 来自C语言
  2. 你可以把函数赋值给变量, 从这点出发,可以将函数作为参数传递给其他函数,也可以作为返回值
    3.auto关键字对函数指针非常有用

#include<iostream>
#include<vector>void HelloWorld() {std::cout << "Hello World" << std::endl;
}void HelloWorld2(int a) {std::cout << "Hello World ! value: " << a << std::endl;
}void basicFuntionPointer() {//auto functionPointer = HelloWorld(); //调用并获取返回值,报错//去掉括号,并不是调用函数了,而是获取函数指针//函数只是CUP指令,当我们编译代码时,它(函数)就在二进制文件的某个地方。//当你编译你的代码时,每个函数都被编译成CPU指令,它们就在我们的二进制文件中,可执行文件中。函数被调用时,检索要执行的指令位置。//此处用&取地址的含义就是:在这个可执行文件中, 找到这个HelloWorld函数,获取这个CPU指令的内存地址//auto functionPointer = &HelloWorld;//我们实际上并没有用&,因为这里有一个隐式的转换。	 auto functionPointer = HelloWorld;functionPointer();functionPointer();//实际类型:void(*)(); 但是需要有一个名字//void(*functionPointer)();//等同于auto nihao = &HelloWorld; 或 auto nihao = HelloWorld; void(*nihao)() = HelloWorld;nihao();
}//最常规用法:取别名,无参
void aliasFuntionPointerNoParams() {typedef void(*HelloWorldFunction)();HelloWorldFunction function = HelloWorld;function();
}//最常规用法:取别名,有参
void aliasFuntionPointerWithParams() {typedef void(*HelloWorld2Function)(int);HelloWorld2Function function2 = HelloWorld2;function2(2);
}//函数指针的实际用例
void PrintValue(int value) {std::cout << "Value:" << value << std::endl;
}
void ForEachVector(const std::vector<int>& vec, void(*func)(int)) {for (int value : vec) {func(value);}
}
void functionPrintVector() {std::vector<int> vec = { 1, 2, 3, 4, 5 };ForEachVector(vec, PrintValue);
}//lambada本质就是一个普通函数,只是不像普通函数那样声明,它是在我们的代码过程中生成,用完即弃的匿名函数
void lambadaFunc() {std::vector<int> vec = { 1, 2, 3, 4, 5 };//[] 在这里叫捕获方式,也就是如何传入传出参数ForEachVector(vec, [](int value) {std::cout << "Value:" << value << std::endl; });
}int main() {basicFuntionPointer();aliasFuntionPointerNoParams();aliasFuntionPointerWithParams();functionPrintVector();std::cin.get();
}
http://www.jsqmd.com/news/112528/

相关文章:

  • 2025年口碑好的小视觉激光切割机厂家推荐及选择指南 - 品牌宣传支持者
  • 2025年评价高的沙水游玩PC管/灯饰灯具PC管厂家推荐及选购参考榜 - 行业平台推荐
  • 2025年年终祛痘沐浴露推荐:专家解析主流品牌核心成分及10强实力排名。 - 十大品牌推荐
  • 2025年靠谱的护手霜/滋润护手霜用户好评厂家排行 - 品牌宣传支持者
  • 2025年年终祛痘沐浴露推荐:聚焦核心祛痘成分效能的权威排名盘点 - 十大品牌推荐
  • 2025年热门的南京发电机厂家选购指南与推荐 - 行业平台推荐
  • 2025年评价高的铝框玻璃门平面铰链厂家最新TOP实力排行 - 行业平台推荐
  • 2025年海狗丸品牌推荐榜:基于成分合规性生产资质与购买渠道 - 资讯焦点
  • 2025年知名的铝框玻璃门针式铰链品牌厂家排行榜 - 行业平台推荐
  • 2025年靠谱的伺服行星减速机品牌厂家排行榜 - 行业平台推荐
  • 2025年比较好的吉林钢板租赁厂家实力及用户口碑排行榜 - 行业平台推荐
  • linux下安装go
  • 2025年年终维生素C产品推荐排行榜单:五大品牌客观评测与选购指南 - 十大品牌推荐
  • 2025年辽宁事业单位联考辅导机构推荐:正规、售后完善、有名机构全解析 - myqiye
  • 2025年年终维生素C产品推荐排行榜:五大品牌综合对比与选购指南 - 十大品牌推荐
  • 2025年云南汽车职业教育机构排名:云南万通汽修学校就业与服务口碑双优 - 工业推荐榜
  • 青岛软件开发公司 推荐青岛双电软件 - 博客万
  • 青岛软件开发公司 推荐青岛双电软件 - 博客万
  • 2025资质齐全的事业单位联考培训公司TOP5权威推荐:事业编制联考实力辅导公司甄选指南 - myqiye
  • 2025年口碑好的净化铝型材/无尘车间净化铝型材最新TOP品牌厂家排行 - 行业平台推荐
  • 2025年靠谱的电力管用户好评厂家排行 - 行业平台推荐
  • 2025年靠谱的电力管用户好评厂家排行 - 行业平台推荐
  • 2025年质量好的T恤定制厂家实力及用户口碑排行榜 - 行业平台推荐
  • 2025年比较好的抽屉滑轨厂家最新权威实力榜 - 行业平台推荐
  • 2025年知名的三折轨/不锈钢三折轨厂家最新TOP实力排行 - 行业平台推荐
  • 成都市川达节能保温材料有限公司 联系方式:材料应用与注意事项说明 - 品牌推荐
  • 完整教程:《半小时漫画计算机》读后感:从入门到构建知识体系
  • 2025年年终麻将机品牌推荐排行榜对比评测:五大品牌客观分析与选购指南 - 十大品牌推荐
  • 2025年年终麻将机品牌综合评测与推荐排行榜:高端静音技术引领者深度解析 - 十大品牌推荐
  • 2025年评价高的实验室开炼机/桌面型开炼机厂家推荐及选择指南 - 行业平台推荐