void funcPtr(int a);
int main(){
int k=1;
void (*funcPtr2)(int);
funcPtr2 = (void*)(funcPtr);
// funcPtr2 = (void(*)(int))(funcPtr);
(*funcPtr2)(k);
return 0;
}
void funcPtr(int a){
printf("%d", a);
}
Run Code Online (Sandbox Code Playgroud)
(void*)
和(void(*)(argument type)
函数指针类型转换有什么区别?
因此,它不会发生警告.
这是错的吗?关于(void*)
型铸造
这是错的吗?about(void*)类型转换
是的.
C标准不允许将函数指针转换为对象指针或它们之间的赋值.如果您提高了编译器警告级别,则可能会收到警告/错误,例如编译:
gcc -Wall -Wextra -pedantic-errors -std=c11 file.c
Run Code Online (Sandbox Code Playgroud)
我不确定你为什么要考虑转换函数指针.如果函数指针类型与函数匹配,只需指定它:
funcPtr2 = funcPtr;
Run Code Online (Sandbox Code Playgroud)
在旁边:
您可以像函数一样使用函数指针:
funcPtr2(k);
Run Code Online (Sandbox Code Playgroud)
并使用标准原型,main
例如:
int main(void)
Run Code Online (Sandbox Code Playgroud)