c - 如何使用void*?

标签 c pointers dynamic-arrays

为什么这段代码使用& (*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 code> 为 void** 类型,一个双 void 指针。尝试将 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;
}

注意:如果没有适当类型的转换,则无法取消引用 void 指针,在本例中为 int。此外,void 指针上不允许进行指针算术。

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

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

关于c - 如何使用void*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35792802/

相关文章:

c - 从c中的命令行读取的字符串中打印转义字符

c - 在 Intel X_86 和 ARM 架构上转储两个相邻的 C 数组时出现奇怪的不同结果

delphi - 记录中的动态数组引用计数

c++ - 如何使用 deleteEntry 函数删除数组中的单个字符串 C++

c - C 中的简单结构程序

c - 我的 c 代码给出了错误的输出

pointers - 在 golang 的嵌套结构中使用指针的好处

c# - 深入了解 .NET 框架中的 EqualsHelper 方法

c - C 中的动态 3D 可变列字符数组操作

c - 需要知道如何在 c 中按空格解析单词。还需要知道我是否正确分配内存?