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. 问题描述:libGL.so.1: cannot open shared object file: No such file or directory

    问题截图: 在实验室服务器上跑代码,报如上错误 解决方案: sudo apt update sudo apt install libgl1-mesa-glx 因遇见多次该错误,特此记录下 (据说该问题 ...

  2. 基于StringUtils实现List和String字符串互转

    将以逗号分割的字符串转换成List类型: String ids= "1,2,32,59,96"; List<Long> idsList = Arrays.asList( ...

  3. MySQL 生成随机字符串 uuid

      MySQL 使用函数 uuid()可以生成随机字符串,方法如下: select replace(uuid(),"-","") as uuid;   最后,楼 ...

  4. 浅析领域驱动模型VO、DTO、BO、PO 等的概念、区别及其用法

    摘要:浅析POJO.DTO.DO.VO.BO.PO和Entity等的概念.区别及其用法. 名词解释   领域模型中的实体类分为四种模型:VO.DTO.DO和PO,各种实体类用于不同业务层次间的交互,并 ...

  5. java netty socket实例:报文长度+报文内容,springboot

    前言 说实话,java netty方面的资料不算多,尤其是自定义报文格式的,少之又少 自己写了个简单的收发:报文长度+报文内容 发送的话,没有写自动组装格式,自己看需求吧,需要的话,自己完善 服务端启 ...

  6. Mysql基线核查

    查看版本信息 select @@version 查看默认创建的测试库和测试用户 show databases like "test%"; select * from mysql.u ...

  7. python 获取mac地址

    python 获取mac地址 方法一:使用socket库 使用了socket库中的ioctl函数和fcntl模块来获取MAC地址 import socket import fcntl import s ...

  8. Elastic学习之旅 (10) Logstash数据采集

    大家好,我是Edison. 上一篇:结构化搜索 Logstash是啥? Logstash是一款优秀的开源ETL工具/数据搜集处理引擎,可以对采集到的数据做一系列的加工和处理,目前已支持200+插件具有 ...

  9. 02VCS_使用教程

    VCS使用教程 (Synopsys VCS Simulator Tutorial) 目录 VCS使用教程 (Synopsys VCS Simulator Tutorial) 目录 1. VCS简介 1 ...

  10. 金山pdf 阅读 点击链接如何跳转回来

    简介 RT ALT + 左箭头