函数指针的定义和用法

先回顾下数组的储存方式,当你在程序中定义了一个数组,那么系统就会自动根据你的数组类型和数组长度申请一块储存空间给你。而且数组名储存的地址刚好就是申请的这块储存空间的首地址,这也是为什么我们在输入字符串时不用&,因为下面的s数组名储存的就是首地址,不用再对它进行取地址符操作了。

char s[100];scanf ( "%s", s );

那么我们再来理解一下函数,与数组类似的,函数名储存的也是首地址。

函数指针不同于指针的地方就是函数指针所储存的地址为函数,而普通指针的地址为变量地址。

函数指针定义方式:
int (*p)(int,int)
函数返回值类型 (*指针变量名)(函数参数列表)函数定义方式:
int func(int, int)
函数返回值类型 函数名(函数参数列表)普通指针定义方式:
int *p
指针类型 指针名

与普通指针的定义方式不同,函数指针的定义方式如上,其中需要特别注意的是(*p)的括号千万不能省略,因为这个和运算符的优先级有关系。如果省略了括号,那么定义的就是一个函数返回值类型为指针的函数了。

普通指针的应用
int a;
p = &a;函数指针的应用
p = func;
//再次强调申明一下,因为函数名就代表了函数的首地址,所以不用像普通指针一样对变量用取地址符&

通过对比也可以知道函数指针的定义方式和函数的定义方式十分类似,区别就在于*

而函数指针的应用因为函数名默认储存首地址的特性也略有不同。

我们知道对于普通指针

*p = a

那么同样的,对于函数指针

(*p)(int, int) = func(int, int)

因此在一些特殊的场景,函数指针就能够发挥自己特点了。

【C语言学习笔记】函数指针的定义和用法相关推荐

  1. 梓益C语言学习笔记之指针

    梓益C语言学习笔记之指针 一.32位平台下,地址是32位,所以指针变量占32位,共4个字节 二.内存单元的地址即为指针,存放指针的变量称为指针变量,故:"指针"是指地址,是常量,& ...

  2. 函数指针及其定义和用法

    函数指针及其定义和用法 1.什么是函数指针 如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址.而且函数名表示的就是这个地址.既然是 ...

  3. 函数指针及其定义和用法,C++函数指针详解(附用法代码和注意事项)

    函数指针可以像一般函数一样,用于调用函数.传递参数.在如 C 这样的语言中,通过提供一个简单的选取.执行函数的方法,函数指针可以简化代码.函数指针只能指向具有特定特征的函数.因而所有被同一指针运用的函 ...

  4. C语言学习笔记--预编译/宏定义/数组/参数传递/函数指针

    目录 预编译 值传递.指针传递.引用传递 数组 typedef 函数指针 预编译 预编译又叫预处理.预编译不是编译,而是编译前的处理.这个操作是在正式编译之前由系统自动完成的.#define 和 #i ...

  5. c语言数组宏定义标识符,C语言学习笔记--预编译/宏定义/数组/参数传递/函数指针...

    目录 预编译 值传递.指针传递.引用传递 数组 typedef 函数指针 预编译 预编译又叫预处理.预编译不是编译,而是编译前的处理.这个操作是在正式编译之前由系统自动完成的.#define 和 #i ...

  6. C语言学习笔记--函数与指针

    1. 函数类型 (1)C 语言中的函数有自己特定的类型,这个类型由返回值.参数类型和参数个数共同决定.如 int add(int i,int j)的类型为 int(int,int). (2)C 语言中 ...

  7. C语言学习笔记--函数

    1. C 语言中的函数 (1)函数的由来: 程序 = 数据 + 算法→C 程序 = 数据 + 函数 (2)模块化程序设计 (3)C 语言中的模块 2. 面向过程的程序设计 (1)面向过程是一种以过程为 ...

  8. C语言学习笔记——函数

    1.函数的介绍 为完成某一功能的程序指令(语句)的集合,称为函数 在C语言中,函数分为: 自定义函数.系统函数 2.函数的定义 2.1函数的基本语法 返回类型 函数名(形参列表){执行语句...; / ...

  9. C语言学习笔记(指针篇)

    1.1指针是什么 关于地址: 在程序中定义一个变量系统就会分配内存单元,根据变量类型去分配一定空间的长度.每一个字节都有一个编号,这就是"地址". 通过地址能找到变量单元,所以我们 ...

最新文章

  1. swift 数组 filter reduce sort 等方法
  2. 良好的代码风格养成记
  3. Java中List详解
  4. 目标和—leetcode494
  5. YY提交招股书赴美上市:连续三季盈利(转)
  6. 最简单 - 单例模式
  7. Keras-保存和恢复模型
  8. 世界之窗浏览器怎么隐藏收藏栏?
  9. 放纵的感觉其实没有想象的那么好!
  10. JWT介绍以及java-jwt的使用
  11. 目录下内容的递归复制Linux,linux下递归复制文件及目录
  12. kubenetes 1.4安装kube-UI
  13. PAT L2-004 这是二叉搜索树吗 [二叉搜索树]
  14. 10多年IT从业者手把手教你备考信息系统项目管理师(简称高项)
  15. HenCoder Android 开发进阶:自定义 View 1-4 Canvas 对绘制的辅助 clipXXX() 和 Matrix
  16. 一台变两台,电脑也分身
  17. Python 图片压缩
  18. 英语单词记忆 词源法-思维导图(18)词源st/sist/stat/stin/stem-277
  19. HALO:用于MR扫描器中实时头部对准的工具
  20. 美国无人机技术及相关项目

热门文章

  1. 国考计算机怎么评分标准,国考阅卷评分标准!不能再详细了!
  2. [附源码]计算机毕业设计志愿者服务平台Springboot程序
  3. union连接攻击MySQL函数_sql注入之必备的基础知识
  4. 又想起Solaris
  5. Java面试知识点(全)- Java面试基础部分一
  6. ISTA 7D包装测试评估运输包装的温度测试。
  7. 运行ISTA测试代码所遇问题
  8. 六小时学会SpringCloud
  9. 使用策略模式的设计方式来实现两个数的操作获得相应的结果。提供四种具体的实施策略,加、减、乘、除操作
  10. POI自动调整列宽错误