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

C/C++中函数指针和指针函数的原理和区别是什么,分别通过用例说明。

文章目录

  • 函数指针和指针函数的区别
    • 函数指针
    • 指针函数
    • 区别
  • 总结

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

在C/C++中,函数指针和指针函数是两个不同的概念,它们的用途和定义方式也有所不同。

函数指针

定义
函数指针是一个指向函数的指针,它存储的是函数的地址。通过函数指针,可以调用对应的函数。

语法

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

原理
函数指针本质上是一个变量,它保存了函数的入口地址。通过函数指针调用函数时,程序会跳转到该地址执行对应的函数代码。

用例

#include <iostream>

// 定义一个函数
void sayHello() {
    std::cout << "Hello, World!" << std::endl;
}

int main() {
    // 定义一个函数指针,指向返回类型为void、无参数的函数
    void (*funcPtr)() = sayHello;

    // 通过函数指针调用函数
    funcPtr();

    return 0;
}

输出

Hello, World!

指针函数

定义
指针函数是一个返回值为指针的函数,它可以返回任何类型的指针(如int*char*等)。

语法

返回类型* 函数名(参数类型列表) {
    // 函数体
}

原理
指针函数和普通函数一样,只不过它的返回值是一个指针。调用指针函数时,它会执行函数体中的代码,并返回一个指针类型的值。

用例

#include <iostream>

// 定义一个指针函数,返回int类型的指针
int* getArray() {
    static int arr[] = {1, 2, 3, 4, 5}; // 使用static避免返回局部变量的指针
    return arr;
}

int main() {
    // 调用指针函数
    int* ptr = getArray();

    // 遍历数组
    for (int i = 0; i < 5; i++) {
        std::cout << ptr[i] << " ";
    }

    return 0;
}

输出

1 2 3 4 5

区别

特性函数指针指针函数
定义指向函数的指针返回指针的函数
语法返回类型 (*指针变量名)(参数类型列表);返回类型* 函数名(参数类型列表)
用途用于间接调用函数用于返回指针类型的值
存储内容函数的地址返回一个指针类型的值

总结

  • 函数指针:用于指向函数的地址,可以通过函数指针调用对应的函数。
  • 指针函数:返回一个指针类型的值,可以是任何类型的指针(如int*char*等)。

通过上述用例和区别,可以更清晰地理解函数指针和指针函数在C/C++中的原理和使用方法。

在这里插入图片描述

参考:https://blog.csdn.net/luoyayun361/article/details/80428882

思路来源:

首先,我得确认自己对这两个概念的理解是准确的。函数指针,顾名思义,是指向函数的指针变量。它存储的是函数的地址,通过这个指针可以调用对应的函数。至于指针函数,嗯,这个术语其实有点容易混淆。它应该是指返回值是指针的函数,也就是函数的返回类型是指针类型。对,这两个概念一个是指向函数的指针,另一个是返回指针的函数,本质上是完全不同的东西。
接下来,我需要考虑怎么把这两个概念讲清楚。嗯,先从定义入手,分别解释它们的语法和用途。函数指针的定义需要指定函数的返回类型、参数类型,以及指针本身的语法,比如用表示这是一个指针。而指针函数的定义则更简单,只需要函数的返回类型是指针类型,比如int或者char*。
我觉得单靠文字描述可能不够直观,用户可能更需要看到具体的代码例子。好吧,我得设计两个例子,一个展示函数指针的用法,另一个展示指针函数的用法。函数指针的例子可以是定义一个函数指针变量,然后让它指向某个函数并调用它,这样可以清楚地展示函数指针的定义和使用方式。指针函数的例子则需要写一个返回指针的函数,比如返回一个数组的地址,这样可以展示指针函数的定义和返回值的使用。
嗯,代码例子的逻辑应该尽量简单明了,避免引入其他复杂的内容,比如动态内存分配或者过多的嵌套调用,否则可能会让用户分心。我还需要注意代码的注释,帮助用户理解每一行代码的作用。
写完例子后,我需要总结一下它们的区别。函数指针是“指向函数的指针”,而指针函数是“返回指针的函数”,这两者的本质区别在于它们的用途和定义方式。函数指针用于间接调用函数,而指针函数用于返回一个指针类型的值。我得把这些区别用简洁的语言总结出来,同时强调它们的使用场景。

相关文章:

  • [Python学习日记-85] 并发编程之多进程 —— Process 类、join 方法、僵尸进程与孤儿进程
  • 两个四元数叉乘与姿态旋转的关系
  • 抽奖系统(从0-1)(上)
  • node版本切换工具【nvm】
  • 大数据学习(55)-BI工具数据分析的使用
  • python19-if和match的美
  • Springboot 注入方式
  • 让单链表不再云里雾里
  • SPI驱动(一) -- SPI协议
  • 服务是否设置为开机自启动
  • 嵌入式开发:磁通门传感器开发(5):测量磁场的方法和传感器
  • Ollama存在安全风险的情况通报及解决方案
  • 【Resis实战分析】Redis问题导致页面timeout知识点分析
  • React Refs:深入理解与最佳实践
  • BUU44 [BJDCTF2020]ZJCTF,不过如此1 [php://filter][正则表达式get输入数据][捕获组反向引用][php中单双引号]
  • Python项目-基于深度学习的校园人脸识别考勤系统
  • Maven 私服的搭建与使用(一)
  • 沃丰科技结合DeepSeek大模型技术落地与应用前后效果对比
  • 内嵌踢脚线怎么做能省钱?
  • 机器学习的半监督学习,弱监督学习,自监督学习
  • 做外贸需要关注的网站有什么问题/seo综合优化公司
  • 英文网站建设情况/数字营销服务商seo
  • 网站运营推广怎么做/竞价托管代运营公司
  • wordpress菜单被隐藏/安卓优化大师旧版本
  • 51做网站/推广关键词如何优化
  • wordpress做图片站/sem培训班学费哪个好