从(void *)类型中取消引用结构

前端之家收集整理的这篇文章主要介绍了从(void *)类型中取消引用结构前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用void指针传递数据,然后将其转换为(pData *)类型.
我究竟做错了什么?
gcc给了我

gcc test.c错误:请求成员’filename’,而不是结构或联合

typedef struct data {
        char *filename;
        int a;
} pData;

void mod_struct(void *data) {
        printf("%s\n",(pData *)data->filename); //error on this line
}

void main() {
        pData *data;
        data = (pData *) malloc(sizeof(pData));
        data->filename = (char *)malloc(100);
        strcpy(data->filename,"testing testing");
        data->a=1;
        mod_struct((void *)&data);
}

解决方法

应该
printf("%s\n",((pData *) data)->filename);

– >运算符的优先级高于类型转换运算符.

除此之外,您对mod_struct的调用应如下所示

mod_struct((void *) data);

那&你有完全没有意义.当数据已经指向您需要的指针时,为什么要获取数据地址?

猜你在找的C&C++相关文章