如何使用无效*?

How to use void*?

为什么这段代码使用& (*p)[i]

typedef void* sir;
int main(){

    sir *p;    
    int x[10],i;    
    for(i = 0;i < 10;i++)
        x[i] = i;
    p = &x;
    for(i = 0;i < 10;i++)
        printf("%d ",&(*p)[i]);
    return 0;
}

您将 sir 类型定义为 void *,因此当您编写 sir *p 时,您将 p 声明为 void** 类型,a double void pointer.Try 而不是将 p 声明为 sir p,并打印数组的元素,使用以下内容:

#include <stdio.h>
#include <stdlib.h>

typedef void* sir;

int main(void)
{
    sir p;
    int x[10], i;
    for (i = 0; i < 10; i++)
        x[i] = i;
    p = &x;
    for (i = 0; i < 10; i++)
        printf("%d ", *((int *)p + i));
    return 0;
}

注意:如果没有适当类型的强制转换,则无法取消引用空指针,int在此 case.Also 指针算法中不允许空指针。

要打印数组元素的地址而不是元素本身,请使用:

for (i = 0; i < 10; i++) {
    printf("%p\n", (void *)((int *)p + i));
}