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

招聘网站建设人员要求推广系统

招聘网站建设人员要求,推广系统,国际进出口贸易网官网,外贸网站排行榜前十名🔗 运行环境:C/C 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 🔐#### 防伪水印——左手の明天 ####🔐 💗 大家好&…

🔗 运行环境:C/C++

🚩 撰写作者:左手の明天

🥇 精选专栏:《python》

🔥  推荐专栏:《算法研究》

🔐#### 防伪水印——左手の明天 ####🔐

💗 大家好🤗🤗🤗,我是左手の明天!好久不见💗

💗今天分享【C/C++】——函数指针与指针函数💗

📆  最近更新:2025 年 02 月 22 日,左手の明天的第 354 篇原创博客

📚 更新于专栏:C/C++入门与进阶

🔐#### 防伪水印——左手の明天 ####🔐


一、概念区分

1. 指针函数(Pointer Function)

  • 定义:返回指针类型的函数

  • 本质:普通函数,仅返回值是指针

  • 声明形式返回类型* 函数名(参数列表)

示例如下:

int* getPointer(int value) {int* ptr = new int(value);return ptr;
}

2. 函数指针(Function Pointer)

  • 定义:指向函数的指针变量

  • 本质:指针变量,存储函数入口地址

  • 声明形式返回类型 (*指针名)(参数列表)

它可以用来调用一个函数或者将一个函数作为参数传递给另一个函数。定义函数指针时,需要指定它所指向的函数的返回类型和参数类型。示例如下:

int add(int a, int b) {return a + b;
}int (*funcPtr)(int, int);int main() {funcPtr = &add;  // 将函数指针指向 add 函数std::cout << funcPtr(2, 3) << std::endl;  // 输出 5return 0;
}

二、指针函数详解

1. 基础用法

#include <iostream>// 指针函数:返回int类型指针
int* createArray(int size) {int* arr = new int[size];for(int i=0; i<size; ++i) {arr[i] = i * 10;}return arr;
}int main() {int* myArray = createArray(5);for(int i=0; i<5; ++i) {std::cout << myArray[i] << " "; // 输出:0 10 20 30 40}delete[] myArray; // 必须手动释放内存return 0;
}

2. 注意事项

  • 避免返回局部变量指针

  • 动态内存需要手动释放

  • 推荐使用智能指针(C++11+)

// 危险示例:返回局部变量指针
int* dangerousFunc() {int localVar = 42;return &localVar; // 警告!返回局部变量地址
}

三、函数指针深度解析

1. 基本声明与使用

#include <iostream>// 普通函数
int add(int a, int b) {return a + b;
}int subtract(int a, int b) {return a - b;
}int main() {// 声明函数指针类型int (*operation)(int, int);operation = &add; // 绑定加法函数std::cout << "10 + 5 = " << operation(10, 5) << std::endl;operation = subtract; // 绑定减法函数(&可选)std::cout << "10 - 5 = " << operation(10, 5) << std::endl;return 0;
}

2. 高级应用:回调函数

#include <vector>// 回调函数处理数组
void processArray(std::vector<int>& arr, void (*callback)(int&)) {for(auto& num : arr) {callback(num);}
}// 回调函数示例
void square(int& num) {num = num * num;
}void print(int& num) {std::cout << num << " ";
}int main() {std::vector<int> numbers = {1, 2, 3, 4, 5};processArray(numbers, square);  // 平方运算processArray(numbers, print);  // 输出:1 4 9 16 25return 0;
}

3. 使用typedef/using简化

// 使用typedef定义函数指针类型
typedef int (*MathOperation)(int, int);// C++11 using语法
using MathOp = int (*)(int, int);int multiply(int a, int b) {return a * b;
}int main() {MathOperation op1 = add;MathOp op2 = multiply;std::cout << op1(3,4) << " " << op2(3,4) << std::endl;return 0;
}

四、综合对比表

特性指针函数函数指针
本质返回指针的函数指向函数的指针变量
声明关键字*在返回类型后(*指针名)包裹
内存管理需要关注返回值生命周期自动管理函数地址
典型应用场景动态对象创建、工厂模式回调机制、策略模式
复杂度单层指针操作可能涉及多级指针

五、复杂场景应用

1. 返回函数指针的函数

#include <iostream>int add(int a, int b) { return a+b; }
int sub(int a, int b) { return a-b; }// 返回函数指针的函数
int (*getOperation(char op))(int, int) {switch(op) {case '+': return &add;case '-': return &sub;default: return nullptr;}
}int main() {int (*operation)(int, int) = getOperation('+');std::cout << "5 + 3 = " << operation(5, 3) << std::endl;return 0;
}

2. 函数指针数组

#include <iostream>void morning() { std::cout << "Good morning!\n"; }
void afternoon() { std::cout << "Good afternoon!\n"; }
void evening() { std::cout << "Good evening!\n"; }int main() {void (*greetings[3])() = {morning, afternoon, evening};for(int i=0; i<3; ++i) {greetings[i]();}return 0;
}

六、最佳实践与常见陷阱

1. 安全建议

  • 使用nullptr初始化函数指针

  • 调用前检查指针有效性

  • 优先使用C++11的std::function

#include <functional>int main() {// 更安全的现代C++方式std::function<int(int,int)> safeOp = add;std::cout << safeOp(7, 8) << std::endl;return 0;
}

2. 常见错误

// 错误1:参数类型不匹配
double (*wrongOp)(float, float) = add; // 错误!类型不兼容// 错误2:错误调用方式
int (*op)(int, int) = add;
op = 10; // 错误!不能赋整数值

七、性能与优化

  • 函数指针调用比虚函数快约15%(无分支预测失败)

  • 在紧密循环中建议使用模板替代

  • 现代CPU的间接调用惩罚已显著降低


关键点总结

  1. 指针函数关注返回值类型,函数指针关注参数匹配

  2. 使用typedef/using提升代码可读性

  3. 优先使用智能指针管理动态内存

  4. C++11后推荐std::function+lambda表达式

通过本文的代码实践和原理分析,读者应该能够准确区分和使用这两类重要特性。建议在需要动态行为选择的场景多用函数指针,而在需要生成动态数据的场景合理使用指针函数。


扩展阅读

  1. 《Effective C++》条款41:了解隐式接口和编译期多态

  2. C++17的std::invoke统一调用机制

  3. 函数指针与多态的性能对比分析


 

http://www.dtcms.com/wzjs/571597.html

相关文章:

  • 在婚纱店做网站优化html5开源项目管理系统
  • 上海网站建设要多少钱怎么制作个人网页教程
  • 微信公众号制作网站南京高端网站设计
  • 石家庄商城网站搭建多少钱千万不能 网站
  • 广州番禺网站制作公司长治做百度网站一年多少钱
  • 手机网站内容模块wordpress首页多图片
  • 网站如何做微信支付宝支付宝支付接口东莞黄江做网站公司
  • 江苏安宜建设工程有限公司网站深圳网站制作哪家负责
  • 网站开发前期准备全国室内设计学校
  • wordpress建站有什么好处职业装定制
  • 珠海企业免费建站招聘网有哪些网站比较好
  • 礼信堂 网站开发上海城隍庙几点关门
  • 装修网站大全哪个网站可以代做试题
  • 网站视频主持人网网站建设教程 零基础
  • 公众号购买重庆黄埔seo整站优化
  • asp网站无法上传图片asp 网站源代码
  • 建设部网站 注册违规东台做网站
  • 网站开发各年的前景网站首页做多大分辨率
  • 佳木斯哈尔滨网站建设爱媛直播
  • 59网站一起做网店wordpress主题使用
  • 赣州网站建设江西网站建设福鼎市建设局网站
  • 汕头仿站定制模板建站慈溪哪里有做网站
  • 网站设计照着做 算侵权吗wordpress设置主页面
  • 网站建设费是宣传费用吗一个简单的网站怎么做
  • 网站后台 开源不同网站对商家做o2o的政策
  • 贵阳网站建设建站解决方案国外 网站开发框架
  • 电影网站logo设计南宁网络推广
  • 商城网站设计注意什么PR做视频需要放网站上
  • 无锡网站建站公司谷歌关键词搜索
  • 建设银行信用卡网站是多少钱电子商城网站的设计与实现