C编程-指针

C编程-指针,c,C,我遇到了以下代码,其输出为0 语句vptr=&i正确吗?我们可以分配一个void指针,一个整数变量的地址吗 #include<stdio.h> void fun(void *p); int i; int main() { void *vptr; vptr = &i; fun(vptr); return 0; } void fun(void *p) { int **q; q = (int**)&p; print

我遇到了以下代码,其输出为0

语句
vptr=&i
正确吗?我们可以分配一个
void
指针,一个整数变量的地址吗

#include<stdio.h>

void fun(void *p);
int i;

int main()
{
    void *vptr;
    vptr = &i;
    fun(vptr);
    return 0;
}
void fun(void *p)
{
    int **q;
    q = (int**)&p;
    printf("%d\n", **q);
}
#包括
虚无乐趣(虚无*p);
int i;
int main()
{
void*vptr;
vptr=&i;
乐趣(vptr);
返回0;
}
虚空乐趣(虚空*p)
{
int**q;
q=(国际**)和p;
printf(“%d\n”,**q);
}

语句
vptr=&i很好

然而,语句
q=(int**)&p不正确<代码>&p
不指向
int*
,而是指向
void*
。不能保证
int*
void*
具有兼容的布局

fun
的正确实现是

void fun(void *p)
{
    printf("%d\n", *(int*)p);
}

任何指针类型都可以转换为
void*
。 从:

指向void的指针可以转换为指向任何对象的指针,也可以转换为指向任何对象的指针 类型。指向任何对象类型的指针都可以转换为指向 虚空又回来;结果应与原始结果进行比较 指针


定义“正确”。语法?语义学?用法?行为?实践?空指针可以被分配任何东西的内存地址。它有时在C中被用来编程“泛型”@SouravGhosh correct意味着它的行为,我们可以使用上面的语句将一个整数类型的内存分配给void吗?