类型转换与指针转换

时间:2014-03-22 18:06:15

标签: c

已知类型转换具有以下形式

(int)x       

这是什么意思?

(int *) x

如果f是函数,那么这是什么意思?

(void *) f

2 个答案:

答案 0 :(得分:3)

(int *) x表示取值x,并将其用作内存地址,该地址指向包含整数的内存位置。这样做时,程序员应该非常小心,x(无论它是什么类型)的值包含有效地址。否则只是执行转换是Undefined Behavior(虽然可能没有做任何有趣的事情,至少在PC上),并且dereferncing =使用指针很可能会因segmentaion故障而崩溃(因为地址不是有效的内存位置)。

(void *)ff转换为" void指针"。如果f在这里起作用并不重要,因为void指针是一种特殊情况,当代码实际上不需要取消引用指针时使用它,它只是传递它。这意味着,"这里是某个地址"。它用于回调,例如设置回调的代码,回调函数本身确实知道类型,但中间的代码不知道。

如果你问,如何将函数强制转换为指针,那么它就是因为在C中,没有()的函数名意味着指向该函数的指针。完成(void*)f并不常见,但如果您有需要的用例,则没有任何问题。

答案 1 :(得分:1)

int * p = (int *) x;表示在x被强制转换为int指针后,p现在设置为x的值,与int y = (int) x;相同。

那个void指针的东西......那不是函数指针声明。我认为你会混淆void指针和函数指针,在你理解基本指针之前,你不应该担心这些指针。