c - 如何取消对 double void 指针指向 int 指针的引用

标签 c pointers indirection

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

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/

相关文章:

c++ - 直观地解释指针及其意义?

java - 设计具有可交换处理程序代码的通用处理程序类?

c - 产生箭头键的输出

c - 你如何在cmd中运行一个c程序

c++ - 加密给定的文本字符串 - 凯撒密码

Delphi - 使用不同的TTable和TQuery作为一个对象

c - 如何将二进制数数组转换为单个二进制数?

c - 什么时候真正需要显式强制转换?

c - 结构体指针语法困惑

C - 为函数内的双指针赋值