转载自:https://blog.csdn.net/qq_43710979/article/details/88030147

C语言函数指针和指针函数的区别

C和C++中经常会用到指针,和数据项一样,函数也是有地址的,函数的地址是存储其机器语言代码的内存的开始地址。

指针函数和函数指针经常会混淆,一个是返回指针的函数,另一个是指向函数的指针,下面就分别解释指针函数和函数指针的区别。

一、指针函数

指针函数是 返回指针的函数 主体是函数,返回值是一个指针
基本声明形式:返回数据类型 + * + 函数名 + (变量类型1,…);
e.g :

int* fun(int,int);
int * fun(int,int);
int *fun(int,int);

这三种声明都可以,第一种更加直观 返回值是 int* 类型

举个栗子:

#include<stdio.h>
int* fun(int* x)    //传入指针
{int* tmp = x;      //指针tmp指向xreturn tmp;       //返回tmp指向的地址
}
int main()
{int b = 2;      int* p = &b;   //p指向b的地址printf("%d",*fun(p));//输出p指向的地址的值return 0;
}

输出结果:2

二、函数指针

函数指针是 指向函数的指针 主体是指针 指向的是一个函数的地址
基本声明形式:返回数据类型 + (*函数名) + (变量类型1,…);
注意 * 和函数名要用括号括起来,否则因为运算符的优先级原因就变成指针函数了
e.g:

int (*fun) (int);
#include<stdio.h>
int add(int x,int y)
{return x + y;
}
int (*fun) (int,int);            //声明函数指针
int main()
{fun = &add;                    //fun函数指针指向add函数printf("%d ",fun(3,5));        printf("%d",(*fun)(4,2));return 0;
}

输出结果:8 6
上面的样例中,使用函数指针时使用fun(3,5)和(*fun)(3,5)都可以

函数指针的参数列表要和函数指针指向的函数的参数列表一致

主要记住指针函数是返回指针的函数函数指针是指向函数的指针
在这个基础上可以有函数指针函数和指针函数指针之类的
指针函数声明的时候 * 和函数名不需要括号括起来
函数指针声明的时候 * 需要和函数名用括号括起来(优先级原因)
————————————————
版权声明:本文为CSDN博主「Kria·L」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43710979/article/details/88030147

以上是函数指针和指针函数的区别,下一篇将讲解函数指针数组。

C语言指针函数和函数指针区别相关推荐

  1. c语言指针自定义函数,c语言函数指针定义,指针函数和函数指针的区别

    往往,我们一提到指针函数和函数指针的时候,就有很多人弄不懂.下面就由小编详细为大家介绍C语言中函数指针,指针函数和函数指针之间的区别. c语言指针函数定义: 函数指针是指向函数的指针变量. 因此&qu ...

  2. C语言基础知识之define宏定义表达式,undef,内存对齐,a和a的区别,数组知识点,int (*)[10] p,二维数组参数与二维指针参数,函数指针数组,常见的内存错误及对策

    一.用define宏定义表达式 1.定义一年有多少秒: #define SEC_A_YEAR 60*60*24*365 //上述描述不可靠,没有考虑到在16位系统下把这样一个数赋给整型变量的时候可能会 ...

  3. 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  4. typedef函数指针_C语言函数指针之回调函数

    1 什么是回调函数? 首先什么是"回调"呢? 我的理解是:把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,这就叫做回调. 如果代码立即被执行就称为同 ...

  5. C语言学习笔记---指向函数的指针

      在内存中函数的存放也是一段连续的内存,函数名就是指向改内存中的首地址,所以也可以将这个函数的首地址赋给一个指针变量,这样通过指针变量就可以访问改函数.   那么为什么要通过指针来访问函数呢?下面通 ...

  6. C语言指针(函数指针数组,二级指针)

    int (*p[num])( char*,int,int );int (*(*p)[num])(int a); 上一篇博客最后的两个例子的答案分别是:函数指针数组,函数指针数组的指针. 函数指针数组指 ...

  7. c语言指针与函数ppt,函数与指针C语言.ppt

    函数与指针C语言.ppt 函数与指针 第7章 7 1概述 第7章 1 按功能划分模块划分模块的基本原则是 各模块都要易于理解 功能尽量单一 模块间的联系尽量少 满足这些要求的模块具有以下优点 7 1 ...

  8. 详解C语言指针函数、函数指针、函数指针数组

    在C语言中,指针是一个很重要但是又很容易弄错的概念,也可以说指针就是C语言的灵魂,所以说学好指针对于完全掌握C语言是一个必须的过程.而在指针中,指针函数.函数指针.指针函数数组.函数指针数组.指向函数 ...

  9. 【C 语言】一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )

    文章目录 一.判定指针合法性 二.数组越界 三.不断修改指针变量值 四.函数中将栈内存数组返回 五.函数间接赋值形参操作 六.指针取值与自增操作 一.判定指针合法性 判定指针合法性时 , 必须进行如下 ...

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

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

最新文章

  1. linux汇编div除法,汇编:div 除法指令
  2. 浅谈新一代Android操作系统Android L
  3. 70条WB, IHC常见实验问题解决方案汇总
  4. pkl格式数据 训练集_Detectron2训练自己的数据集手把手指导
  5. Spoken English Practice (I'm having whatever you're having)
  6. jedis开发过程中遇到的问题及其解决方法
  7. C++ 泛型编程-函数模板
  8. c语言运动员成绩查询,运动会成绩管理系统
  9. php掷骰子小游戏代码,C语言实现掷骰子游戏代码及解析
  10. 如何在Word中快速制作组织结构图?没想到可以如此简单
  11. Redis持久化策略AOF、RDB详解及源码分析
  12. “只取一瓢饮”的读书
  13. HDU 5698 瞬间移动 (2016百度之星 - 初赛(Astar Round2B) 1003)
  14. 应用市场无法连接服务器怎么办,无法连接到app store是什么原因?苹果应用商店打不开的解决方法...
  15. 双摄像头做slsm_刚刚考完!真实双机位复试经验帮你避雷!
  16. 【浏览器】浏览器安全
  17. nxn次方求和函数_算法|小学生都能看懂的生成函数入门教程
  18. java之利用行列式展开法,计算行列式的值
  19. 从WAVE SUMMIT+2021,寻找新一代AI人不可或缺的“凝视”
  20. 珂朵莉与妖精仓库的妖精们

热门文章

  1. miniusbpcb封装_MINI MICRO A型B型D型USB多类型Altium AD元件库 PCB封装库的电路方案详解...
  2. appium历史版本下载
  3. UDS诊断协议规范与要求
  4. Java常用软件安装包分享
  5. 身份证前6位对应的省市区县
  6. 《FLUENT 14流场分析自学手册》——1.3 附面层理论
  7. win10蓝牙开关不见了_来自德国,比JBL更硬汉,这款户外蓝牙音箱,上得厅堂下得厨房...
  8. OpenDDS应用开发步骤
  9. ASCLL码对照表02(可显示字符)
  10. 西宁公交调度员招聘计算机题库,调度员考试题库.doc