C语言 --- 函数指针(初级)
1.函数指针:指向函数的指针变量.
函数在内存中也是有地址的,函数名代表函数的内存地址.
例子:函数:int sum(int a,int b);
int sum(int a,int b){
return a+b;
}
函数名+形参 就是函数
函数指针: 函数指针定义:int(*p)(int a,int b);
技巧,赋值函数声明int sum(int a,int b),将sum括起来加个*号,将sum改个名字,就定义了一个函数指针,p就是变 量,p = sum;int x = sum(2,3); int x = p(2,3);等价
2. 函数指针剖析
int(p*)(int a,int b) = NULL;
类型: int(*)(int a,int b)
变量名: p
初值: NULL
3. p = sum;
p = naxValue;
p可以指向任何一个函数;
4. typedef int (*PFUN)(int,int);
相当于把int(*)(int a,int b)改成了PFUN;
PFUN p = NULL;
P = sum;
给函数指针赋值,必须与定义的类型一致.此时p的类型是int
5. 回调函数
callback
函数回调核心就是把函数作为形参;
例子:int maxValue(int x,int y){
return a > b ? a : b;
}
int getValue(int x, int y){
return sum(x,y);// 此时getValue是求和;调用时 int a = getValue(2,4);
或者 return maxValue(x,y);// 此时getValue是求最大值;调用时 int a = getValue(2,4);
使用哪个就得改getValue函数的内部实现,不灵活,比较麻烦!!!!
}
int getValue(int x, int y,PFUN p){(PFUN p代表返回值是整形的函数指针)
return p(x, y);
}
int a = getValue(2,4,maxValue);
int b = getValue(2,4,sum);
两种的实现,getValue一点都没变,只是传参数的值.还可以添加其它函数,p随意指,很方便.
比如迅雷公司,此时getValue是核心的代码,是知识产权,不会让程序员修改,升级时只是添加函数,然后主函数调用就可 以了
C语言 --- 函数指针(初级)的更多相关文章
- C#委托与C语言函数指针及函数指针数组
C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...
- C语言函数指针基础
本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础.如果你不讨厌事无巨细,请尽情阅读吧. 函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具.本文将从C ...
- “对外部(局部)变量的访问”是C语言函数指针的最大弱点
1.“对外部(局部)变量的访问”是C语言函数指针的最大弱点 . #include <stdio.h> #include <stdlib.h> /* 结构体定义 */ struc ...
- C语言函数指针 和 OC-Block
C语言函数指针 和 OC-Block 一. C语言函数指针 关于函数指针的知识详细可参考:http://www.cnblogs.com/mjios/archive/2013/03/19/2967037 ...
- C语言函数指针实验
上次看Atmel的示例工程,发现人家使用了函数指针的结构体(函数指针结构体).感叹人家的C语言功夫审核,自己费劲还是只能读懂的份.不过,函数指针确实好用.今天就试试这个超牛的东西.Now let's ...
- C语言函数指针的用法
函数指针是一种在C.C++.D语言.其他类 C 语言和Fortran 2003中的指针.函数指针可以像一般函数一样,用于调用函数.传递参数.在如 C 这样的语言中,通过提供一个简单的选取.执行函数的方 ...
- c语言函数指针的理解与使用
1.函数指针的定义 顾名思义,函数指针就是函数的指针.它是一个指针,指向一个函数.看例子: A) char * (*fun1)(char * p1,char * p2); B) char * *fun ...
- C语言函数指针(转载)
二.通常的函数调用 一个通常的函数调用的例子:/* 自行包含头文件 */void MyFun(int x); /* 此处的声明也可写成:void MyFun(int) */int main(int a ...
- C语言函数指针变量和指针函数以及指针数组
C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址.我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数.然后通过指针变量就可以找到并调用这 ...
随机推荐
- Js文件函数中调用另一个Js文件函数的方法
在项目中Js文件需要完成某一功能,但这一功能的大部分代码在另外一个Js文件已经完成,只需要调用这个文件实现功能.那么如何调用:一个Js文件函数中调用另一个Js文件函数的方法? (直接代码说明) 示例d ...
- mysql 报错从 新安装
卸载从新安装,综合运用 https://www.jb51.net/article/146050.htm https://www.jb51.net/article/90275.htm https://w ...
- SSM框架搭建,以及mybatis学习
前两天在研究SSM框架,然后看到一篇博文,写的很清晰,照着实现了一下,这里就不重复写了,把博文地址留一下 http://blog.csdn.net/zhshulin/article/details/3 ...
- linux下安装R第三方包forecast
ERROR: [root@localhost soft]# R CMD INSTALL curl_3.1.tar.gz WARNING: ignoring environment value of R ...
- [CSP-S模拟测试]:小Y的图(最小生成树+LCA)
题目传送门(内部题131) 输入格式 第一行三个整数$n$.$m$和$Q$. 接下来$m$行每行三个整数$x$.$y$.$z$($1\leqslant x,y\leqslant n,1\leqslan ...
- LocalDate/LocalDateTime与String的互相转换示例(附DateTimeFormatter详解)
摘自:https://www.jianshu.com/p/b7e72e585a37 LocalDate/LocalDateTime与String的互相转换示例(附DateTimeFormatter详解 ...
- C++入门经典-例3.4-根据成绩划分等级
1:代码如下: // 3.4.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...
- MySQL学习笔记(cmd模式下的操作)
1.登入MySQL 1.1 登入MySQL 1.1.1命令如下: C:\Users\zjw>mysql -hlocalhost -uroot -p Enter password: ****** ...
- LeetCode 55. 跳跃游戏(Jump Game)
题目描述 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1: 输入: [2,3,1,1,4] 输出: ...
- Ruby的异常处理
Ruby在处理0.1+0.2是会出现精度问题: 许多语言都有类似问题,详见网址:http://0.30000000000000004.com/ Ruby的异常处理 如果异常处理范围是整个方法体,可以省 ...