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);
}
(void*)
和(void(*)(argument type)
函数指针类型转换之间有什么区别?
结果,它不会发生警告。
错了吗 关于(void*)
类型转换
错了吗 关于(void *)类型转换
是的。
C标准不允许将函数指针转换为对象指针或在它们之间进行赋值。如果您提高了编译器警告级别,则可能会收到警告/错误,例如使用以下命令进行编译:
gcc -Wall -Wextra -pedantic-errors -std=c11 file.c
我不确定为什么您要考虑转换函数指针。如果函数指针类型与函数匹配,则只需为其分配:
funcPtr2 = funcPtr;
在旁边:
您可以像使用函数一样使用函数指针:
funcPtr2(k);
并将标准原型用于main
:
int main(void)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句