在我的代码我有:
int number_compare(void *val1, void *val2) {
if (*(int*) val1 < *(int*s) val2) {
Run Code Online (Sandbox Code Playgroud)
所以基本上从void*转换为int我必须转换*(int*).
这有效,并给我正确的结果,有人可以告诉我为什么,或指向我解释它的线程.我已经看了,找不到我理解的答案.
那不是转换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和指针类型可能不是相同的大小.