https://www.cnblogs.com/freshman-y/p/18780981

在C语言中,“指针函数”和“函数指针”听起来相似,但它们实际上代表了两种完全不同的概念。

一、指针函数

指针函数指的是返回值类型为指针的函数。也就是说,这种函数在执行完毕后返回一个指针变量,而不是直接返回基本数据类型或结构体。

#include <stdio.h>

// 定义一个指针函数,返回一个指向int的指针
int* getStaticNumber() {
static int num = 100; // 使用static确保返回地址有效
return &num;
} int main() {
int *p = getStaticNumber();
printf("指针函数返回的值:%d\n", *p);
return 0;
}

说明:

1.上面的 getStaticNumber() 函数返回一个指向整数的指针。由于局部变量在函数调用结束后可能被销毁,我们使用 static 关键字来保证变量 num 的生命周期足够长。

2.调用该函数后,通过指针 p 就能访问返回的整数值。

二、函数指针

函数指针则是指指向函数的指针变量。简单来说,函数指针可以存储某个函数的地址,通过它可以间接调用这个函数。这在需要回调、策略模式或动态函数调用时非常有用。

#include <stdio.h>

// 定义一个普通函数,用于求两个数的和
int add(int a, int b) {
return a + b;
} int main() {
// 声明一个函数指针,指向接受两个int参数并返回int的函数
int (*funcPtr)(int, int) = add; // 通过函数指针调用函数
int result = funcPtr(10, 20);
printf("函数指针调用返回的值:%d\n", result);
return 0;
}

说明:

1.这里的 funcPtr 是一个函数指针,它存储了函数 add 的地址。

2.通过 funcPtr(10, 20) 实现了对 add 函数的调用,获得了两个数的和。

三、主要区别

定义上不同:

指针函数:是一个函数,其返回值为指针类型,例如:int* func();

         函数指针:是一个指针变量,用来存储函数地址,例如:int (*funcPtr)(int, int);

用途不同:

        指针函数:用于返回指针,通常用于返回动态分配的内存地址、数组或其他数据结构地址。

        函数指针:用于实现函数回调、事件驱动或动态选择调用哪个函数。

调用方式不同:

        指针函数:调用后直接返回一个指针,然后可以用该指针访问相应数据。

        函数指针:通过指针调用函数,可以实现类似“多态”的效果,根据具体情况调用不同的函数。

C语言指针函数和函数指针的区别?的更多相关文章

  1. c语言指针函数与函数指针

    例一:指针函数 指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符    *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个 ...

  2. 【嵌入式开发】C语言 命令行参数 函数指针 gdb调试

    . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21551397 | http://www.hanshul ...

  3. C语言---指针变量作为函数参数

    在C语言中,函数的参数不仅可以是整数.小数.字符等具体的数据,还可以是指向它们的指针.用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着 ...

  4. C语言的抽象与函数指针--思想(转)

    一.何为抽象? 从小到大,我们接触到的抽象,最熟悉的莫过于数学了.为什么这样说呢? 比如说,在小学的时候,老师总是拿了几个苹果来引诱我们:同学们,这里有几个苹果啊?于是我们流着口水一个个地数,一个苹果 ...

  5. C语言 命令行参数 函数指针 gdb调试

    . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21551397 | http://www.hanshul ...

  6. C语言 函数指针一(函数指针的定义)

    //函数指针 #include<stdio.h> #include<stdlib.h> #include<string.h> //函数指针类型跟数组类型非常相似 / ...

  7. 深入浅出剖析C语言函数指针与回调函数(一)【转】

    本文转载自:http://blog.csdn.net/morixinguan/article/details/65494239 关于静态库和动态库的使用和制作方法. http://blog.csdn. ...

  8. C语言指针系列 - 一级指针.一维数组,二级指针,二维数组,指针数组,数组指针,函数指针,指针函数

    1. 数组名 C语言中的数组名是一个特殊的存在, 从本质上来讲, 数组名是一个地址, 我们可以打印一个指针的值,和打印一个数组的值来观察出这个本质: int nArray[10] ={ 0 }; in ...

  9. C语言随笔5:函数、函数指针

    函数 C语言中函数参数传递时,将实参的值拷贝到函数参数的存储区中.这种传递参数的方式称为按值传递. 函数不会访问实参本身,访问的是函数存储在栈区的副本,不会改变实参.函数凋用结束,函数在栈区的内容释放 ...

  10. C语言回顾-内存管理和指针函数

    1.fgets()函数 该函数是一个文件操作相关的函数 暂时使用这个函数可以从键盘上接收一个字符串,保存到数组中 char str[50]; 1)scanf("%s",str);/ ...

随机推荐

  1. No grammar constraints (DTD or XML schema) detected for the document

    warning: No grammar constraints (DTD or XML schema) detected for the document 未检测到文档的语法约束(DTD或XML模式) ...

  2. jdk8下载地址(附赠安装包)

    jdk下载地址:https://jdk.java.net/ (文末已经为大家下好了,放在网盘里) 进去后点8,win. 安装好后,使用java -version命令如下: 成功安装jdk! 为大家提供 ...

  3. Go中的map和指针

    本文参考:https://www.liwenzhou.com/posts/Go/08_map/ MAP(映射) Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现.(类似于Pyth ...

  4. 关于Node.js 构建中遇到node-gyp报错问题的解决方案记录

    项目今天进行版本更新,在走阿里云流水线的时候,出现了Node.js 构建过程报错问题,抱歉详情截图如下: 经过反复排查,最终发现是因为阿里云的npm仓库的问题,于是果断更换npm仓库,执行命令如下: ...

  5. ChatMoney,分析梦境的大师

    本文由 ChatMoney团队出品 作为一个爱幻想爱做白日梦的 i人,我常常就在想,什么时候能利用Al来帮助我找回一些被遗忘的.或者模糊不清的记忆? 有没有可能进入别人的梦境里瞧一瞧? 为什么世界上还 ...

  6. UFT 的三种方法获取时间

  7. Kafka入门实战教程:学习总结目录索引

    0 Kafka学习路径 在学习Kafka的途中,我总结了一个系列的Kafka学习征途系列教程,它只选取了我认为最实用的部分整理出来,以及结合我最熟悉的.NET技术栈进行了演示. 而一些我觉得在实际中用 ...

  8. 插件报错:SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“.解决方案

    今天在用Maven搞一个工程,安装要求我添加了所有需要的依赖,可是一运行测试程序,就跳出这样一个大大的错误: SLF4J: Failed to load class "org.slf4j.i ...

  9. SpringMVC三层结构

    Java SpringMVC的工程结构一般来说分为三层,自下而上是Modle层(模型,数据访问层).Cotroller层(控制,逻辑控制层).View层(视图,页面显示层),其中Modle层分为两层: ...

  10. XSY3490 / ZROI P618 广义线段树 + 莫队 + 点分树

    \(Solution\) 为了与普通区间区分,我们称线段树上某个结点 \([l, r]\) 为 块 \([l, r]\) 考虑模拟线段树区间查询 \([l, r]\) 时下放到的底部端点,必然是一堆连 ...