众所周知,类型转换具有以下形式
(int)x
这是什么意思?
(int *) x
如果f是一个函数,那意味着什么?
(void *) f
(int *) x
意味着,取的值x
,并将其用作内存地址,该地址指向包含整数的内存位置。这样做时,程序员应该非常小心x
(无论它是什么类型)的值确实包含有效地址。否则,仅执行强制转换是“未定义行为”(尽管至少在PC上可能不会做任何有趣的事情),并且取消引用=使用指针很可能会因段错误而崩溃(因为地址无效的内存位置)。
(void *)f
强制转换f
为“无效指针”。f
此处是否有功能无关紧要,因为void指针是一种特殊情况,在代码实际上不需要取消引用指针时使用它,它只是将其传递出去。意思是“这是某物的地址”。例如,它与回调一起使用,当设置回调的代码和回调函数本身确实知道类型时,而介于两者之间的代码则不知道。
如果您在问,如何将函数像这样转换为指针,那是因为在C语言中,没有函数名的函数就()
意味着指向该函数的指针。这样做(void*)f
根本不常见,但是如果您有需要的用例,那没有什么错。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句