码迷,mamicode.com
首页 > 其他好文 > 详细

函数指针

时间:2018-04-20 16:55:09      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:函数指针

先上一段代码:

#include<stdio.h>
typedef int (*FUNADD)(const int value1,const int value2);
FUNADD func;
int (*subFun)(const int value1,const int value2);
int sub(const int value1,const int value2)
{
	return value1-value2;
}
int add(const int value1 ,const int value2)
{
	return value1+value2;
}
int main()
{
	func = add;
	printf("func=%p *func=%p &func=%p\n",func,*func,&func);
	printf("add = %d\n",(*func)(1,2));
	subFun = sub;
	printf("subFun=%p *subFun=%p &subFun = %p\n",subFun,*subFun,&subFun);
	printf("sub = %d\n",subFun(2,1));
	printf("sub=%p *sub =%p &sub =%p\n",sub ,*sub ,&sub );
	return 0;
}

结果:

技术分享图片

经过一段时间的工作,到处都在用函数指针;闲的时候总结下。

一、函数指针

int (*subFun)(const int value1,const int value2);

1、这个东西一看就是指针对吧,因为带了括号,所以肯定不是返回值为指针的函数了;那他就是函数指针了,不知道你明白了吗。(因为*是和函数先结合的)

2、因为是指针,所以具有指针的特性;sunFun = sub肯定是成立的,有人会说sub不是函数名吗?那我们来看看,sub,*sub,&sub的值是一样的(比较特殊)。再来看看subFun,*subFun,&subFun,前面两个地址相同,后面一个不同,这个也好理解(因为sunFun是指针,指针的地址肯定和函数的地址不同)。

*sub是函数名也可以当指针用,sub的值是函数地址,&sub也是函数的地址;就像(数组,a,和&a[0]的地址一样,意义不一样)。所以subFun和*subFun和sub的值一样。

二、typedef函数指针

typedef int (*FUNADD)(const int value1,const int value2);
FUNADD func;

1、typedef就是重新定义了一个别名,typedef函数指针,当然是重新定义了别名,就能用他来定义。

2、FUNADD当然就是一个函数指针了,用它来定义的func就是拥有此功能的函数指针。

不知道我说清楚了,语言组织能力一直是个bug。




函数指针

标签:函数指针

原文地址:http://blog.51cto.com/zhaoxiaohu/2105798

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!