首页 > > > C/C++函数指针与指针函数(二)
上次的文章
嵌入式Linux:C/C++函数指针与指针函数
发出来后,有个同学在后面留言

个人觉得说的比较中肯,文章只说了一些肤浅的东西,没有实质性的内容,也没有涉及到项目开发中,所以这次多说一些,希望大家不要觉得啰嗦。

这是我的android项目hal部分的C++代码,这部分代码用到的是函数指针,通过name来调用不同的函数。
我们有时候看别人的代码时候,经常是一面懵逼,比如下面这个
void (p)(); 还有这个 ((void(*) ())0)();
我记得我在以前的文章里面有谈到一个右左原则,从p开始看,往右走直到遇到)再往左走遇到( ,(*p) 我们就可以看出p是一个指针,继续分析往右走,遇到(),说明p指向一个(void)的函数,往左走,知道p指向的函数返回值是void。ok,看下面的例子。
#include "stdio.h"
void Function()
{
printf("Call Function!\n");
}
int main()
{
void(*p)();
*(int*)&p = (int)Function;
(*p)();
getchar();
return 0;
}

然后继续分析
((void() ())0)();
#include <stdio.h>
#include <string.h>
char * fun1(char * p)
{
printf("%s\n", p);
return p;
}
char * fun2(char * p)
{
printf("%s\n", p);
return p;
}
char * fun3(char * p)
{
printf("%s\n", p);
return p;
}
int main()
{
char * (*pf[3])(char * p);
pf[0] = fun1; // 可以直接用函数名
pf[1] = &fun2; // 可以用函数名加上取地址符
pf[2] = &fun3;
pf[0]("fun1");
pf[0]("fun2");
pf[0]("fun3");
getchar();
return 0;
}
欢迎关注微信公众号-嵌入式Linux
觉得不错,请帮忙转发,点赞,您的每一次支持,我都将铭记于心
原文作者:;如有侵权,请联系管理员删除。