如何将双空指针解引用到 int 指针

hmm*_*mmm 1 c pointers indirection

我有一个看起来有点像这样的代码:

int num = 5;
int *ptr = #
void **xptr = &ptr;
printf ("values:%d\n",**(int *)xptr); 
Run Code Online (Sandbox Code Playgroud)

为什么我不能取消引用指向 int 指针的 void 双指针?以下两个示例有效。

片段:1

int *ptr = #
int **xptr = &ptr;
printf ("values:%d\n",**xptr);
Run Code Online (Sandbox Code Playgroud)

片段 2:

void *ptr = #
printf ("values:%d\n",*(int *)ptr);
Run Code Online (Sandbox Code Playgroud)

hac*_*cks 5

void **不是一个通用指针,不像void *. void **您使用的任何值都必须是void *某处实际值的地址。编译器应该发出警告void **xptr = &ptr;

[Warning] initialization from incompatible pointer type [enabled by default]
Run Code Online (Sandbox Code Playgroud)

你可以这样做

int num = 5;
void *ptr = #
void **xptr = &ptr;
printf ("values:%d\n", *((int *)*xptr));  
Run Code Online (Sandbox Code Playgroud)

更详细的解释,请阅读comp.lang.c FAQ list · Question 4.9