C的函数声明(*(void(*)())0)();
作者 斯人 | 发布于 2013 年 4 月 27 日
Linux C

在看一些优秀开源项目的时候,总是能看到各种指针,各种函数的用法,我对这方面的理解还是很晦涩,今天就抽空恶补一下,

翻了翻《c语言陷阱与缺陷》,下面就简单做一下总结:

先来看看一个声明:

(*(void(*)())0)();

只能用变态来形容了,下面就来一步一步剖析:

最简单的变量声明方式:

int a;//声明一个类型为int型的变量

最简单的函数声明方式

int fn();//声明 fn函数返回的结果类型是int型

最简单的指针声明方式:

int *p=0;//声明一个指向int型的指针p,初始化为0.

返回指针的函数:

int *a();

最简单的函数指针声明方式:
int (*h)();

h是一个函数指针,如果要强制转换类型,该怎么办?

其实很容易 。

简单的类型转换:

void *p=10;
printf("%d\n",(int*)p);

那函数指针也是一样的,

比如,如果要把某个函数 强制转换为 int(*h)()类型的函数指针该怎么办?

只需要这样 (int (*)())(表达式)就可以了。。。

那如果要声明一个 (int (*)())类型的指针函数怎么办?

第一步 声明一个 函数指针

int (*a)();

只需要把(int (*)())作为一个类型强制转换a就可以了
(*(int (*)())a)()

它其实是一个 类型为 (int (*)())的函数指针而已。。

原文出处:http://www.imsiren.com/archives/829