已知类型转换具有以下形式
(int)x
这是什么意思?
(int *) x
如果f是函数,那么这是什么意思?
(void *) f
答案 0 :(得分:3)
(int *) x
表示取值x
,并将其用作内存地址,该地址指向包含整数的内存位置。这样做时,程序员应该非常小心,x
(无论它是什么类型)的值包含有效地址。否则只是执行转换是Undefined Behavior(虽然可能没有做任何有趣的事情,至少在PC上),并且dereferncing =使用指针很可能会因segmentaion故障而崩溃(因为地址不是有效的内存位置)。
(void *)f
将f
转换为" void指针"。如果f
在这里起作用并不重要,因为void指针是一种特殊情况,当代码实际上不需要取消引用指针时使用它,它只是传递它。这意味着,"这里是某个地址"。它用于回调,例如设置回调的代码,回调函数本身确实知道类型,但中间的代码不知道。
如果你问,如何将函数强制转换为指针,那么它就是因为在C中,没有()
的函数名意味着指向该函数的指针。完成(void*)f
并不常见,但如果您有需要的用例,则没有任何问题。
答案 1 :(得分:1)
int * p = (int *) x;
表示在x被强制转换为int指针后,p现在设置为x的值,与int y = (int) x;
相同。
那个void指针的东西......那不是函数指针声明。我认为你会混淆void指针和函数指针,在你理解基本指针之前,你不应该担心这些指针。