c中从void*转换为int的说明

cxz*_*xzp 3 c type-conversion

在我的代码我有:

int number_compare(void *val1, void *val2) {
    if (*(int*) val1 < *(int*s) val2) {
Run Code Online (Sandbox Code Playgroud)

所以基本上从void*转换为int我必须转换*(int*).

这有效,并给我正确的结果,有人可以告诉我为什么,或指向我解释它的线程.我已经看了,找不到我理解的答案.

Car*_*rum 7

那不是转换void *到int.它正在解释任何void *指向的东西int.分解:

val1           // void pointer - not dereferenceable
(int *)val1    // pointer to 'int'
*(int *)val1   // the 'int' being pointed to
Run Code Online (Sandbox Code Playgroud)

所以你的函数被传递了两个指针:它然后将它们解释为指向它们的指针int并取消引用它们,比较int指向的两个值.

与此相反,从转换void *到int会是这个样子:

int x = (int)val1;
Run Code Online (Sandbox Code Playgroud)

但这几乎肯定不是你想要的 - 首先是因为int签名,指针不是,第二因为int和指针类型可能不是相同的大小.