函数指针
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数指针相关的知识,希望对你有一定的参考价值。
先上一段代码:
#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。
以上是关于函数指针的主要内容,如果未能解决你的问题,请参考以下文章
使用 std::thread 函数 C++11 将指针作为参数传递
如何在汇编函数中将元素数组作为参数传递时转发ARM寄存器的地址指针