繁体   English   中英

如何将双重void指针解引用到int指针

[英]How to dereference a double void pointer to an int pointer

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

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);

解决方案是在两侧同时使用两个星号。

printf ("values:%d\n",**(int **)xptr); 

为什么? 因为否则,您会向编译器提供有关您实际操作的虚假信息。 C样式强制转换可以强制编译所有内容,但您必须了解自己:如果强迫编译器执行某些操作,则不要责怪他生成可能的崩溃代码。

我想知道编译器是否不会对此发出警告。 是否做到了,您忽略了警告?

请记住,对于xptr ,您的初始化可能是错误的。 请从这里查看吊床的帖子。

void *不同, void **不是通用指针。 您使用的任何void **值必须是某个地方的实际void *值的地址。 编译器应针对void **xptr = &ptr;发出警告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常见问题列表·问题4.9

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM