我的代码看起来有点像这样:
int num = 5;
int *ptr = #
void **xptr = &ptr;
printf ("values:%d\n",**(int *)xptr);
为什么我不能取消引用指向 int 指针的 void 双指针?下面两个 示例有效。
片段:1
int *ptr = #
int **xptr = &ptr;
printf ("values:%d\n",**xptr);
片段 2:
void *ptr = #
printf ("values:%d\n",*(int *)ptr);
最佳答案
void **
与 void *
不同,它不是通用指针。您使用的任何 void **
值都必须是某处实际 void *
值的地址。编译器应该对 void **xptr = &ptr;
发出警告:
[Warning] initialization from incompatible pointer type [enabled by default]
你可以按照下面的方式来做
int num = 5;
void *ptr = #
void **xptr = &ptr;
printf ("values:%d\n", *((int *)*xptr));
有关更详细的解释,请阅读 comp.lang.c FAQ list · Question 4.9 .
关于c - 如何取消对 double void 指针指向 int 指针的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25748921/