C语言深度解剖(精讲版)——读书笔记22-函数指针
来源:互联网 发布:sql常用查询语句大全 编辑:程序博客网 时间:2024/06/16 06:21
第四章 指针和数组
这篇文章写的不好,推荐另一篇好文章地址:http://www.cnblogs.com/gmh915/archive/2010/06/11/1756067.html
函数指针
一.函数指针的定义
(按照我原来说的方法: 后面的那个词”作为主语的方法 C语言深度解剖(精讲版)——读书笔记18 &&自己的一些理解 博文有讲 , 函数指针:即指向函数的指针)
看例子:
(a) char * (*fun1)(char *p1,char *p2);
(b) char * *fun2(char *p1, char *p2);
(c) char *fun3 (char *p1, char *p2);
看上面的表达式是什么意思?
(c) :fun3是函数名, 函数的返回值为char * 类型;
(b) :与(c)相比唯一不同就是,函数的返回值为char **类型,是个二级指针;
(a) :fun1是一个指针变量,它指向一个函数。这个函数有两个指针类型的参数,函数的返回值也是一个指针 ;
二.函数指针的使用例子
如何来使用一个函数指针?来看下面的例子:
#include <stdio.h>#include <string.h>char * fun(char * p1, char *p2){ int i=0; i=strcmp(p1,p2); if(0==i) { retrun p1; } else { retrun p2; }}int main(){ char * (*pf)(char *p1,char *p2); pf=&fun; (*pf)("aa","bb"); retrun 0;}
使用指针时,我么通过钥匙(“*”)来取其指向的内存里面的值,函数指针使用也如此。通过(*pf)取出存在这个地址上的函数,然后调用它。
【注意:给函数指针赋值时,可以用&fun或直接用函数名fun。这里以为函数名编译之后其实就是一个地址,所以这里两种用法没有本质的区别】
三. *(int *)&p ---这是什么?
上面的例子过于简答,我们再来看看下面的例子:
void Function()
{
printf("Call Function");
}
int main()
{
void (*p)();
*(int *)&p =(int )Function;
(*p)();
retrun 0;
}
这是什么意思??*(int *)&p =(int )Function; 先看:
void (*p)(); //定义了一个指针变量p,p指向了一个函数,这个函数的参数和返回值都是void;
&p :求指针变量p本身的地址,这是一个32位的二进制常数(32位系统);
(int *)&p :表示将地址强制转换为int 类型的数据的指针;
(int )Function :表示将函数的入口地址强制转换成int类型的数据。
所以:*(int *)&p =(int )Function 表示将函数Function 的入口地址复制给指针变量p
(*p)() :表示对函数Function的调用 ;
其实,函数指针和普通指针没有什么区别,只是函数指针指向的内容为函数而已。。。
- C语言深度解剖(精讲版)——读书笔记22-函数指针
- C语言深度解剖(精讲版)——读书笔记18 -指针数组&&数组指针
- C语言深度解剖——读书笔记(数组和指针)
- C语言深度解剖——读书笔记-7、指针和数组
- C语言深度解剖——读书笔记-8、指针和数组
- C语言深度解剖——读书笔记-9、指针和数组
- C语言深度解剖——读书笔记-10、指针和数组
- C语言深度解剖——读书笔记-11、指针和数组
- C语言深度解剖(精讲版)——读书笔记1 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记2 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记3 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记4 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记5 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记6 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记7 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记8 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记9 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记10 &&自己的一些理解
- (转)塔吉特读心术——用户数据分析的魔力
- 每日学习总结
- national unified cpu architecture
- shared_ptr解析
- 用Eclipse 开发Dynamic Web Project应用程序
- C语言深度解剖(精讲版)——读书笔记22-函数指针
- 将网卡ethx与其相关的驱动解除绑定
- hdu 1028(普通型母函数)
- double float 类型的输出
- 关于数据库中的一些常用数据类型
- 中国老百姓买房十大死穴 专家教你如何解开
- RGB颜色查询对照表
- 解析Oracle数据扫描 Oracle SQL查询优化 引导局部范围数据扫描的方法(1)
- 当析构函数遇到多线程 ── C++ 中线程安全的对象回调