#include <stdio.h>
typedef struct {
int i;
} A;
void f(A* a) {
printf("%d\n", a->i);
}
int main() {
void (*pf)(void*) = (void(*)(void*))&f;
A a;
pf(&a); // 1
((void(*)(A*))pf)(&a); // 2
}
一个函数指针
void(*)(A*)
被转换为一个函数指针 void(*)(void*)
。然后它被调用时带有参数类型为 A*
。当直接使用时,是否可以保证其正确工作 (1)?还是需要像 (2) 一样进行转换回去?