我们可以将指向某个函数的指针转换为其他类型的指针,不过要谨慎使用,因为运行时系统不会验证函数指针所用的参数是否正确。也可以把一种函数指针转换为另一种再转换回来,得到的结果和原指针相同,但函数指针的长度不一定相等。下面的代码说明了这个操作:
这段代码执行后输出11。
警告 无法保证函数指针和数据指针相互转换后正常工作。
void*
指针不一定能用在函数指针上,也就是说我们不应该像下面这样把函数指针赋给void*
指针:
不过在交换函数指针时,通常会见到如下声明所示的“基本”函数指针类型。这里把fptrBase
声明为指向不接受参数也不返回结果的函数的函数指针。
下面的代码片段说明了基本指针的用法,跟上一个例子是一样的效果:
基本指针用做占位符,用来交换函数指针的值。
警告 一定要确保给函数指针传递正确的参数,否则会造成不确定的行为。