【发布时间】:2016-01-26 23:50:50
【问题描述】:
我知道根据标准void * 是通用指针,而void ** 不是。所以,在我的程序中,我试图转换 void * 而不是直接输入 cast void ** 但我没有得到预期的结果。我想我在这里遗漏了一些非常基本的东西。
#include <stdio.h>
void check(void **p)
{
printf("value: %d\n", *(int *)*p);
}
int main()
{
int a[] = {6,2,5,1,8};
int *p;
p = a;
void **val;
val = (void *)p;
check(val);
return 0;
}
我有一个void ** 指针val,它指向int *,但被转换为void *。我将它传递给函数check,它期待void **。在我的printf 中,我首先将*p(即void *)转换为int *,然后取消引用它。我得到一些随机值。我在这里遗漏了什么吗?
【问题讨论】:
-
val = &p;应该是val = p; -
编辑:我之前粘贴了错误的示例。我正在处理两个不同的案例。对此感到抱歉。
-
嗯你只是
void check(void *p) { printf("value: %d\n", *(int *)p); }没有必要使用void**。 -
@BLUEPIXY 因为作者想要一个“
void **指针val,它指向int *”,val = &p对他的目的来说是正确的,尽管代码仍然是错误的,因为@不保证 987654344@ 可以与int**转换。为什么建议用val = p代替它?通过您的修改,val不再是指向指针的指针。
标签: c pointers void-pointers